snowflake-data-validation 1.45.3__tar.gz → 1.45.4__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 (715) hide show
  1. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/PKG-INFO +12 -1
  2. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/README.md +11 -0
  3. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/pyproject.toml +1 -1
  4. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +1 -1
  5. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +5 -12
  6. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +30 -0
  7. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +26 -28
  8. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +30 -0
  9. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +1 -1
  10. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +9 -7
  11. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +5 -0
  12. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +2 -1
  13. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/constants.py +1 -2
  14. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +100 -17
  15. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +17 -4
  16. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +0 -3
  17. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_table_metadata_float_precision.py +2 -2
  18. snowflake_data_validation-1.45.4/tests/unit/Teradata/test_teradata_unicode_character_length.py +98 -0
  19. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/query/test_normalization_render_context.py +0 -1
  20. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_iceberg_dv_l3_normalization.py +48 -22
  21. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_iso_dv_common.py +44 -0
  22. snowflake_data_validation-1.45.4/tests/unit/test_redshift_iceberg_timestamp_metrics.py +175 -0
  23. snowflake_data_validation-1.45.3/tests/unit/test_redshift_iceberg_timestamp_metrics.py +0 -94
  24. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/.gitignore +0 -0
  25. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/LICENSE +0 -0
  26. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/docs/README.md +0 -0
  27. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
  28. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
  29. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
  30. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
  31. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
  32. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
  33. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
  34. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
  35. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
  36. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
  37. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +0 -0
  38. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
  39. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
  40. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
  41. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
  42. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
  43. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
  44. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
  45. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
  46. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +0 -0
  47. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
  48. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
  49. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
  50. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
  51. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +0 -0
  52. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +0 -0
  53. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +0 -0
  54. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +0 -0
  55. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
  56. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +0 -0
  57. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +0 -0
  58. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
  59. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
  60. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
  61. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
  62. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
  63. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
  64. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
  65. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
  66. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
  67. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
  68. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
  69. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
  70. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
  71. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
  72. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
  73. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
  74. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
  75. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
  76. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/db2_lob_normalization.py +0 -0
  77. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
  78. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
  79. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
  80. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +0 -0
  81. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +0 -0
  82. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +0 -0
  83. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
  84. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
  85. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +0 -0
  86. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
  87. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
  88. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +0 -0
  89. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
  90. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
  91. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
  92. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
  93. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
  94. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
  95. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
  96. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
  97. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
  98. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
  99. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
  100. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
  101. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +0 -0
  102. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
  103. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
  104. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
  105. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
  106. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
  107. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +0 -0
  108. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
  109. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
  110. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
  111. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +0 -0
  112. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
  113. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +0 -0
  114. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
  115. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
  116. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_statement_functions.py +0 -0
  117. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
  118. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/oracle_xmltype.py +0 -0
  119. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
  120. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +0 -0
  121. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
  122. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
  123. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
  124. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
  125. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
  126. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
  127. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
  128. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
  129. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
  130. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
  131. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
  132. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
  133. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
  134. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
  135. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
  136. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
  137. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  138. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
  139. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
  140. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
  141. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
  142. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
  143. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
  144. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
  145. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
  146. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
  147. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
  148. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
  149. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
  150. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
  151. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
  152. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
  153. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
  154. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
  155. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
  156. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
  157. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
  158. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
  159. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
  160. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
  161. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
  162. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
  163. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
  164. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
  165. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
  166. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
  167. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
  168. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
  169. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
  170. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
  171. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
  172. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
  173. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
  174. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
  175. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
  176. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
  177. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
  178. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
  179. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
  180. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
  181. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
  182. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
  183. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
  184. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
  185. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
  186. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
  187. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
  188. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
  189. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
  190. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
  191. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
  192. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
  193. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
  194. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
  195. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
  196. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
  197. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
  198. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
  199. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
  200. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
  201. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
  202. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
  203. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
  204. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
  205. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
  206. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
  207. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
  208. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/decimal_text_normalization.py +0 -0
  209. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
  210. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
  211. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
  212. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/float_aggregate_reduction.py +0 -0
  213. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +0 -0
  214. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/normalization_render_context.py +0 -0
  215. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +0 -0
  216. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
  217. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
  218. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/sql_type_families.py +0 -0
  219. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/time_precision_resolution.py +0 -0
  220. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/tsql_float_remainder.py +0 -0
  221. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
  222. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
  223. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
  224. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
  225. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
  226. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
  227. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
  228. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  229. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
  230. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
  231. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
  232. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
  233. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
  234. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
  235. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
  236. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
  237. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_show_columns_query.sql.j2 +0 -0
  238. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
  239. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
  240. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
  241. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
  242. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
  243. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
  244. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +0 -0
  245. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
  246. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
  247. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
  248. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
  249. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
  250. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
  251. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
  252. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
  253. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
  254. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
  255. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
  256. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
  257. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
  258. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
  259. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/_wkt_despace.sql.j2 +0 -0
  260. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
  261. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
  262. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
  263. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
  264. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
  265. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
  266. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_iceberg_format_version.sql.j2 +0 -0
  267. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
  268. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
  269. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
  270. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
  271. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
  272. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
  273. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +0 -0
  274. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
  275. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
  276. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
  277. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
  278. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
  279. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
  280. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
  281. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
  282. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
  283. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
  284. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
  285. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
  286. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
  287. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
  288. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
  289. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
  290. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
  291. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
  292. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
  293. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
  294. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
  295. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
  296. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
  297. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
  298. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
  299. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -0
  300. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
  301. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
  302. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
  303. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
  304. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
  305. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
  306. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
  307. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
  308. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
  309. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
  310. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
  311. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
  312. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
  313. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
  314. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
  315. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
  316. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
  317. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
  318. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
  319. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
  320. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
  321. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
  322. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
  323. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
  324. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
  325. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
  326. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
  327. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
  328. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
  329. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
  330. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +0 -0
  331. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
  332. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
  333. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
  334. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_string_length_normalization.py +0 -0
  335. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_tz_normalization.py +0 -0
  336. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_uniqueidentifier_normalization.py +0 -0
  337. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
  338. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
  339. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
  340. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
  341. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
  342. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
  343. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
  344. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
  345. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
  346. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
  347. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
  348. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
  349. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +0 -0
  350. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
  351. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
  352. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
  353. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
  354. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
  355. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
  356. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
  357. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
  358. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
  359. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
  360. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
  361. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
  362. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +0 -0
  363. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
  364. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
  365. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
  366. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
  367. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
  368. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
  369. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
  370. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
  371. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
  372. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
  373. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
  374. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
  375. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
  376. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
  377. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
  378. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/dv_tracing.py +0 -0
  379. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/error_classifier.py +0 -0
  380. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
  381. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
  382. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
  383. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
  384. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
  385. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
  386. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
  387. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
  388. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
  389. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
  390. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/lob_source_types.py +0 -0
  391. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
  392. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
  393. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +0 -0
  394. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
  395. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
  396. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/column_selection.py +0 -0
  397. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
  398. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
  399. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
  400. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/period_common.py +0 -0
  401. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
  402. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +0 -0
  403. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
  404. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/row_validation_lob_exclusion.py +0 -0
  405. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
  406. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
  407. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
  408. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
  409. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
  410. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
  411. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +0 -0
  412. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
  413. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
  414. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
  415. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
  416. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
  417. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
  418. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
  419. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/column_pairing.py +0 -0
  420. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
  421. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +0 -0
  422. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
  423. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/lossy_number_mapping.py +0 -0
  424. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
  425. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
  426. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/object_type_criterion.py +0 -0
  427. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
  428. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
  429. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
  430. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
  431. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
  432. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
  433. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
  434. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
  435. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
  436. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
  437. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
  438. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
  439. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
  440. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
  441. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
  442. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
  443. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
  444. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
  445. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
  446. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
  447. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
  448. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
  449. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/.coveragerc +0 -0
  450. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/conftest.py +0 -0
  451. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/integration/.coveragerc +0 -0
  452. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
  453. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/integration/test_async_generation_integration.py +0 -0
  454. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/integration/test_async_validation_integration.py +0 -0
  455. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/integration/test_reference_integration.py +0 -0
  456. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/integration/test_source_validation_integration.py +0 -0
  457. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/integration/test_sync_validation_integration.py +0 -0
  458. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_bit_count_distinct.py +0 -0
  459. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_collation.py +0 -0
  460. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_enum_metadata.py +0 -0
  461. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_json_cell_validation.py +0 -0
  462. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_jsonb_row_hash.py +0 -0
  463. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
  464. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
  465. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
  466. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
  467. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
  468. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_connector_redshift.py +0 -0
  469. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
  470. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_collation.py +0 -0
  471. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_columns_metadata_template.py +0 -0
  472. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
  473. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
  474. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_split_schema_query.py +0 -0
  475. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_super_normalization.py +0 -0
  476. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_timetz_sentinel_normalization.py +0 -0
  477. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
  478. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_connector_teradata.py +0 -0
  479. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
  480. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_period_varchar_l1.py +0 -0
  481. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
  482. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_collation.py +0 -0
  483. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_columns_metadata_precision_scale.py +0 -0
  484. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
  485. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
  486. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
  487. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
  488. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/__init__.py +0 -0
  489. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
  490. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
  491. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
  492. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
  493. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
  494. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
  495. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
  496. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
  497. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
  498. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
  499. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
  500. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
  501. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
  502. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
  503. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
  504. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/__init__.py +0 -0
  505. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
  506. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_l3_convert_normalization.py +0 -0
  507. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
  508. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
  509. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
  510. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +0 -0
  511. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
  512. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
  513. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/bigquery/__init__.py +0 -0
  514. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/bigquery/test_bigquery_l1_string_length.py +0 -0
  515. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
  516. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/bigquery/test_query_generator_bigquery.py +0 -0
  517. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
  518. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/conftest.py +0 -0
  519. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/db2/__init__.py +0 -0
  520. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_lob_dv_generation.py +0 -0
  521. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
  522. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_query_generator.py +0 -0
  523. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_registration.py +0 -0
  524. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_xml_long_dv_generation.py +0 -0
  525. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/db2/test_db2_xml_long_metrics.py +0 -0
  526. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/__init__.py +0 -0
  527. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -0
  528. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_configured_index_columns.py +0 -0
  529. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
  530. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
  531. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
  532. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
  533. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
  534. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
  535. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_query_generator.py +0 -0
  536. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
  537. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_quoted_identifiers.py +0 -0
  538. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
  539. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
  540. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/query/test_time_fraction_rendering.py +0 -0
  541. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/snowflake/test_snowflake_get_case_sensitive_columns.py +0 -0
  542. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/snowflake/test_snowflake_get_iceberg_format_version.py +0 -0
  543. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
  544. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/__init__.py +0 -0
  545. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
  546. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
  547. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
  548. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +0 -0
  549. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
  550. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
  551. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/__init__.py +0 -0
  552. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
  553. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
  554. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_full_ingest_utc.py +0 -0
  555. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_metrics_utc.py +0 -0
  556. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_physical_target.py +0 -0
  557. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_json.py +0 -0
  558. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -0
  559. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_l1_character_length.py +0 -0
  560. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_l3_convert_normalization.py +0 -0
  561. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_length_metrics_chars.py +0 -0
  562. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
  563. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_row_queries.py +0 -0
  564. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
  565. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
  566. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_string_length_pairing.py +0 -0
  567. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_uniqueidentifier_l3_normalization.py +0 -0
  568. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_sqlserver_xml_image_metrics.py +0 -0
  569. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/sqlserver/test_tsql_integer_stddev_exact.py +0 -0
  570. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_accepted_transformation.py +0 -0
  571. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_arguments_manager_base.py +0 -0
  572. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_arguments_manager_factory.py +0 -0
  573. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_batched_metrics_queries.py +0 -0
  574. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
  575. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_case_sensitive_column_pairing.py +0 -0
  576. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_catalog_column_size.py +0 -0
  577. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_catalog_queries_take_actual_names.py +0 -0
  578. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_cell_data_validator.py +0 -0
  579. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_cell_data_validator_threading.py +0 -0
  580. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_cell_validation_query_generation.py +0 -0
  581. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_charset_normalization.py +0 -0
  582. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_column_grouping.py +0 -0
  583. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_column_metadata.py +0 -0
  584. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_column_normalization_override.py +0 -0
  585. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_column_partitioning_strategy.py +0 -0
  586. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_column_selection.py +0 -0
  587. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_column_selection_actual_names.py +0 -0
  588. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_comparison_codec.py +0 -0
  589. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_comparison_orchestrator.py +0 -0
  590. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_configuration_file_editor.py +0 -0
  591. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_configuration_file_generator.py +0 -0
  592. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_configuration_file_synchronizer.py +0 -0
  593. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_configuration_loader.py +0 -0
  594. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_configuration_model.py +0 -0
  595. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_connection_pool.py +0 -0
  596. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_connector_failure_tracker.py +0 -0
  597. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_connector_snowflake.py +0 -0
  598. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_cpu_optimizer.py +0 -0
  599. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_custom_templates_models.py +0 -0
  600. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_data_validator.py +0 -0
  601. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_decimal_text_canonical.py +0 -0
  602. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_dv_tracing.py +0 -0
  603. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_error_classifier.py +0 -0
  604. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_escape_odbc_value.py +0 -0
  605. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_executor_factory.py +0 -0
  606. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_extraction_keeps_catalog_column_spelling.py +0 -0
  607. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_fetch_schema_metadata.py +0 -0
  608. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_float_aggregate_reduction.py +0 -0
  609. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_float_bit_canonical.py +0 -0
  610. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_float_canonical_templates.py +0 -0
  611. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_get_configuration_file.py +0 -0
  612. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_get_target_cols.py +0 -0
  613. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_helper_dataframe.py +0 -0
  614. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_helper_io.py +0 -0
  615. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_helper_polars_cast.py +0 -0
  616. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_helper_polars_cast_threading.py +0 -0
  617. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_helpers.py +0 -0
  618. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_html_report_builder.py +0 -0
  619. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_iceberg_v2_metrics_exclusion.py +0 -0
  620. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_index_key_format.py +0 -0
  621. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_internal_helpers.py +0 -0
  622. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_interval_common.py +0 -0
  623. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_l2_collation_metadata.py +0 -0
  624. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_l2_count_distinct_opt_in_config.py +0 -0
  625. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_logging_config.py +0 -0
  626. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_lossy_number_mapping.py +0 -0
  627. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_metric_identifier_rendering.py +0 -0
  628. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_metrics_reshape.py +0 -0
  629. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_metrics_result_shape.py +0 -0
  630. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_metrics_templates_casts.py +0 -0
  631. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_metrics_tolerance.py +0 -0
  632. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_normalize_shape_aware.py +0 -0
  633. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_numeric_scale_resolution.py +0 -0
  634. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_object_type_criterion.py +0 -0
  635. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_parallel_execution_engine_fatal_errors.py +0 -0
  636. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_period_common.py +0 -0
  637. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_platform_bridge.py +0 -0
  638. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_postgresql_normalization_templates.py +0 -0
  639. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_postgresql_tz_normalization.py +0 -0
  640. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_pushdown_diff_sql.py +0 -0
  641. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_query_cell_level_validation.py +0 -0
  642. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_query_executor.py +0 -0
  643. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_query_generator_numeric_scale.py +0 -0
  644. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_query_metrics_level_validation.py +0 -0
  645. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_query_to_dataframe.py +0 -0
  646. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_query_validator.py +0 -0
  647. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_qvci_fallback.py +0 -0
  648. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
  649. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_qvci_fallback_triggers.py +0 -0
  650. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_redshift_native_timestamptz_ltz.py +0 -0
  651. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_report_metadata.py +0 -0
  652. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_cell_level_validation.py +0 -0
  653. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
  654. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_snapshot_generation.py +0 -0
  655. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_snapshot_validation.py +0 -0
  656. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_to_dataframe.py +0 -0
  657. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_result_set_validator.py +0 -0
  658. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_row_count_bigint_overflow.py +0 -0
  659. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_row_data_validator.py +0 -0
  660. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_row_data_validator_empty_chunk.py +0 -0
  661. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_row_hash_column_delimiter.py +0 -0
  662. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_row_partitioning_strategy.py +0 -0
  663. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_row_validation_lob_exclusion.py +0 -0
  664. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_row_validation_report_buffer.py +0 -0
  665. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_schema_accepted_native_datatypes.py +0 -0
  666. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_schema_column_selection.py +0 -0
  667. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_schema_query_capability.py +0 -0
  668. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_shutdown_coordinator.py +0 -0
  669. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_signature_external_table.py +0 -0
  670. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_signature_row_md5_query.py +0 -0
  671. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_snapshot_validation_statements.py +0 -0
  672. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_snowflake_arguments_manager.py +0 -0
  673. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
  674. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_snowflake_redshift_super_size_guard.py +0 -0
  675. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_source_validation_executor.py +0 -0
  676. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
  677. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_sql_catalog_template_guard.py +0 -0
  678. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_sql_literal_jinja_filter.py +0 -0
  679. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_sqlite_validation_connection.py +0 -0
  680. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
  681. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
  682. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_sync_executor_qvci_fallback.py +0 -0
  683. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_sync_schema_validation_real_callbacks.py +0 -0
  684. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_sync_validation_executor.py +0 -0
  685. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_table_column_metadata_model.py +0 -0
  686. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_table_configuration.py +0 -0
  687. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_table_context.py +0 -0
  688. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_table_metadata_processor.py +0 -0
  689. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_table_snapshot_generation.py +0 -0
  690. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_table_snapshot_validation.py +0 -0
  691. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_target_platform_factory.py +0 -0
  692. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_telemetry.py +0 -0
  693. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_templates_loader_manager.py +0 -0
  694. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_teradata_iso_normalization.py +0 -0
  695. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_teradata_string_rtrim_policy.py +0 -0
  696. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_teradata_timetz_metric_domain.py +0 -0
  697. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_teradata_type_code_mapping.py +0 -0
  698. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_timestamp_golden_vectors.py +0 -0
  699. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_trace_bridge.py +0 -0
  700. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_tsql_float_l2_aggregates.py +0 -0
  701. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_configuration.py +0 -0
  702. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_database_connection.py +0 -0
  703. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_execution_context.py +0 -0
  704. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_progress_reporter.py +0 -0
  705. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_report_buffer.py +0 -0
  706. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_report_status.py +0 -0
  707. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_validation_templates_dto.py +0 -0
  708. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_vector_bit_normalization.py +0 -0
  709. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_vector_common.py +0 -0
  710. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_vector_normalization.py +0 -0
  711. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_view_configuration.py +0 -0
  712. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/test_warm_start.py +0 -0
  713. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/utils/__init__.py +0 -0
  714. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/tests/unit/utils/test_constants.py +0 -0
  715. {snowflake_data_validation-1.45.3 → snowflake_data_validation-1.45.4}/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.3
3
+ Version: 1.45.4
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/
@@ -230,6 +230,17 @@ For configuration options and examples, see the [official documentation](https:/
230
230
 
231
231
  ## Changelog
232
232
 
233
+ ### v1.45.4
234
+
235
+ **Improvements**
236
+
237
+ - Improved Iceberg validation to read the table format version from the Snowflake catalog once before validation starts, so every validation level uses the actual format version.
238
+
239
+ **Bug fixes**
240
+
241
+ - Fixed Redshift Iceberg metrics validation comparing signed-year `DATE` and `TIMESTAMPTZ` values.
242
+ - Fixed Teradata `UNICODE` `CHAR`, `VARCHAR`, and `CLOB` column lengths being reported in bytes, which raised false truncation warnings.
243
+
233
244
  ### v1.45.3
234
245
 
235
246
  **Bug fixes**
@@ -139,6 +139,17 @@ For configuration options and examples, see the [official documentation](https:/
139
139
 
140
140
  ## Changelog
141
141
 
142
+ ### v1.45.4
143
+
144
+ **Improvements**
145
+
146
+ - Improved Iceberg validation to read the table format version from the Snowflake catalog once before validation starts, so every validation level uses the actual format version.
147
+
148
+ **Bug fixes**
149
+
150
+ - Fixed Redshift Iceberg metrics validation comparing signed-year `DATE` and `TIMESTAMPTZ` values.
151
+ - Fixed Teradata `UNICODE` `CHAR`, `VARCHAR`, and `CLOB` column lengths being reported in bytes, which raised false truncation warnings.
152
+
142
153
  ### v1.45.3
143
154
 
144
155
  **Bug fixes**
@@ -5,7 +5,7 @@ requires = ["hatchling"]
5
5
  [tool.uv]
6
6
  constraint-dependencies = [
7
7
  "certifi>=2026.10.23,<2026.11",
8
- "virtualenv>=21.7.13,<21.8",
8
+ "virtualenv>=21.14.9,<21.15",
9
9
  ]
10
10
 
11
11
  [project]
@@ -157,7 +157,7 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
157
157
  normalized = normalized[:index]
158
158
  return normalized.strip()
159
159
 
160
- def _resolve_metrics_col_type(self, col, table_context: TableContext) -> str:
160
+ def _resolve_metrics_col_type(self, col: ColumnMetadata, table_context: TableContext) -> str:
161
161
  """Key the metrics YAML lookup off the parameterless base type."""
162
162
  return self.normalize_bigquery_type(col.data_type)
163
163
 
@@ -394,8 +394,7 @@ class QueryGeneratorBase(ABC):
394
394
  override this. Combined generators leave the base raise in place.
395
395
  """
396
396
  raise NotImplementedError(
397
- f"{self.platform.value} uses a combined schema query; "
398
- "call generate_schema_query instead of generate_schema_row_count_query"
397
+ f"{self.platform.value} uses a combined schema query; call generate_schema_query instead of generate_schema_row_count_query"
399
398
  )
400
399
 
401
400
  def generate_schema_details_query(self, table_context: TableContext) -> str:
@@ -405,8 +404,7 @@ class QueryGeneratorBase(ABC):
405
404
  override this. Combined generators leave the base raise in place.
406
405
  """
407
406
  raise NotImplementedError(
408
- f"{self.platform.value} uses a combined schema query; "
409
- "call generate_schema_query instead of generate_schema_details_query"
407
+ f"{self.platform.value} uses a combined schema query; call generate_schema_query instead of generate_schema_details_query"
410
408
  )
411
409
 
412
410
  def normalize_schema_details_result(
@@ -420,10 +418,7 @@ class QueryGeneratorBase(ABC):
420
418
  as a combined schema query (without ``ROW_COUNT``; the fetch helper
421
419
  attaches that). Combined generators leave the base raise in place.
422
420
  """
423
- raise NotImplementedError(
424
- f"{self.platform.value} uses a combined schema query; "
425
- "normalize_schema_details_result is not used"
426
- )
421
+ raise NotImplementedError(f"{self.platform.value} uses a combined schema query; normalize_schema_details_result is not used")
427
422
 
428
423
  def generate_metrics_query(self, table_context: TableContext) -> GeneratedMetricsQuery:
429
424
  """Generate a single wide metrics SELECT for a table.
@@ -645,7 +640,7 @@ class QueryGeneratorBase(ABC):
645
640
  return numeric_norm
646
641
  return None
647
642
 
648
- def _resolve_metrics_col_type(self, col, table_context: TableContext) -> str:
643
+ def _resolve_metrics_col_type(self, col: ColumnMetadata, table_context: TableContext) -> str:
649
644
  """Return the metrics YAML type key for a column (platforms may override)."""
650
645
  from snowflake.snowflake_data_validation.utils.vector_common import is_vector_base_type
651
646
 
@@ -956,9 +951,7 @@ class QueryGeneratorBase(ABC):
956
951
  mask = self._build_numeric_format_mask(self._resolve_numeric_scale(col))
957
952
  normalization = normalization.replace(NUMERIC_FORMAT_MASK_PLACEHOLDER, mask)
958
953
  if ICEBERG_FRACTION_DIGITS_PLACEHOLDER in normalization:
959
- normalization = normalization.replace(
960
- ICEBERG_FRACTION_DIGITS_PLACEHOLDER, str(iceberg_fraction_digits)
961
- )
954
+ normalization = normalization.replace(ICEBERG_FRACTION_DIGITS_PLACEHOLDER, str(iceberg_fraction_digits))
962
955
  metric_expr = self._wrap_metric_with_normalization(normalization, metric_expr)
963
956
  alias = f"c{measured_idx}_m{metric_idx}"
964
957
  select_exprs.append(f"{metric_expr} AS {alias}")
@@ -635,6 +635,36 @@ TIMESTAMP_AS_TEXT:
635
635
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
636
636
  metric_return_datatype: BIGINT
637
637
 
638
+ # Iceberg VARCHAR DATE (SNOW-4381535): MIN/MAX rendered as the UNLOAD footer's
639
+ # signed astronomical-year text. Kept in sync with DMO by test_redshift_consistency.py.
640
+ DATE_AS_TEXT:
641
+ min:
642
+ metric_query: MIN("{{ col_name }}")
643
+ metric_return_datatype: VARCHAR
644
+ metric_normalization: '(CASE WHEN (CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END) < 0 THEN ''-'' ELSE '''' END || (CASE WHEN ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END)) < 1000 THEN LPAD(ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END))::VARCHAR, 4, ''0'') ELSE ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END))::VARCHAR END)) || ''-'' || LPAD(EXTRACT(MONTH FROM {{ metric_query }})::VARCHAR, 2, ''0'') || ''-'' || LPAD(EXTRACT(DAY FROM {{ metric_query }})::VARCHAR, 2, ''0'')'
645
+ max:
646
+ metric_query: MAX("{{ col_name }}")
647
+ metric_return_datatype: VARCHAR
648
+ metric_normalization: '(CASE WHEN (CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END) < 0 THEN ''-'' ELSE '''' END || (CASE WHEN ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END)) < 1000 THEN LPAD(ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END))::VARCHAR, 4, ''0'') ELSE ABS((CASE WHEN EXTRACT(YEAR FROM {{ metric_query }})::INT < 0 THEN EXTRACT(YEAR FROM {{ metric_query }})::INT + 1 ELSE EXTRACT(YEAR FROM {{ metric_query }})::INT END))::VARCHAR END)) || ''-'' || LPAD(EXTRACT(MONTH FROM {{ metric_query }})::VARCHAR, 2, ''0'') || ''-'' || LPAD(EXTRACT(DAY FROM {{ metric_query }})::VARCHAR, 2, ''0'')'
649
+ count_null:
650
+ metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
651
+ metric_return_datatype: BIGINT
652
+
653
+ # Iceberg VARCHAR TIMESTAMPTZ (SNOW-4381535): MIN/MAX of the instant, rendered in
654
+ # UTC with the UNLOAD footer's signed year. Kept in sync with DMO by test_redshift_consistency.py.
655
+ TIMESTAMPTZ_AS_TEXT:
656
+ min:
657
+ metric_query: MIN("{{ col_name }}")
658
+ metric_return_datatype: VARCHAR
659
+ metric_normalization: '(CASE WHEN (CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END) < 0 THEN ''-'' ELSE '''' END || (CASE WHEN ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END)) < 1000 THEN LPAD(ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END))::VARCHAR, 4, ''0'') ELSE ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END))::VARCHAR END)) || TO_CHAR(({{ metric_query }} AT TIME ZONE ''UTC''), ''-MM-DD"T"HH24:MI:SS.US'') || ''000'' || ''+00:00'''
660
+ max:
661
+ metric_query: MAX("{{ col_name }}")
662
+ metric_return_datatype: VARCHAR
663
+ metric_normalization: '(CASE WHEN (CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END) < 0 THEN ''-'' ELSE '''' END || (CASE WHEN ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END)) < 1000 THEN LPAD(ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END))::VARCHAR, 4, ''0'') ELSE ABS((CASE WHEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT < 0 THEN EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT + 1 ELSE EXTRACT(YEAR FROM ({{ metric_query }} AT TIME ZONE ''UTC''))::INT END))::VARCHAR END)) || TO_CHAR(({{ metric_query }} AT TIME ZONE ''UTC''), ''-MM-DD"T"HH24:MI:SS.US'') || ''000'' || ''+00:00'''
664
+ count_null:
665
+ metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
666
+ metric_return_datatype: BIGINT
667
+
638
668
  TIMESTAMPTZ:
639
669
  min:
640
670
  metric_query: MIN("{{ col_name }}")
@@ -62,7 +62,9 @@ from snowflake.snowflake_data_validation.utils.constants import (
62
62
  SchemaValidationFields,
63
63
  )
64
64
  from snowflake.snowflake_data_validation.utils.iceberg_dv_common import (
65
+ DATE_AS_TEXT_KEY,
65
66
  TIMESTAMP_AS_TEXT_KEY,
67
+ TIMESTAMPTZ_AS_TEXT_KEY,
66
68
  IcebergProfile,
67
69
  resolve_iceberg_v2_compatible_source_normalization_key,
68
70
  )
@@ -80,12 +82,21 @@ from snowflake.snowflake_data_validation.utils.measure_collation import (
80
82
  base_type,
81
83
  has_effective_collation,
82
84
  )
85
+ from snowflake.snowflake_data_validation.utils.model.column_metadata import ColumnMetadata
83
86
  from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
84
87
 
85
88
 
86
89
  LOGGER = logging.getLogger(__name__)
87
90
  _REDSHIFT_NORMALIZED_COLLATION_TOKENS = ("COLLATE(", ", 'case_sensitive')")
88
- _TIMESTAMP_BASE_TYPES = frozenset({CommonType.TIMESTAMP, CommonType.TIMESTAMP_WITHOUT_TIME_ZONE})
91
+ # Source clocks the Iceberg UNLOAD stages as signed-year text, keyed to the
92
+ # metrics template that renders MIN / MAX the same way.
93
+ _SIGNED_YEAR_TEXT_METRICS_KEYS: dict[str, str] = {
94
+ CommonType.DATE: DATE_AS_TEXT_KEY,
95
+ CommonType.TIMESTAMP: TIMESTAMP_AS_TEXT_KEY,
96
+ CommonType.TIMESTAMP_WITHOUT_TIME_ZONE: TIMESTAMP_AS_TEXT_KEY,
97
+ CommonType.TIMESTAMPTZ: TIMESTAMPTZ_AS_TEXT_KEY,
98
+ CommonType.TIMESTAMP_WITH_TIME_ZONE: TIMESTAMPTZ_AS_TEXT_KEY,
99
+ }
89
100
 
90
101
  # Redshift ``TO_CHAR`` formats numbers with 64-bit arithmetic. A numeric format
91
102
  # mask with N total digit placeholders (integer nines + fractional zeros) admits
@@ -525,19 +536,12 @@ class QueryGeneratorRedshift(QueryGeneratorBase):
525
536
  ``schema.table`` only (same rule as :func:`quoted_non_empty_fqn`).
526
537
  """
527
538
  if not table_context.schema_name or not table_context.internal_table_name:
528
- raise ValueError(
529
- "Redshift schema-details query requires schema and table names for "
530
- f"{table_context.fully_qualified_name}"
531
- )
539
+ raise ValueError(f"Redshift schema-details query requires schema and table names for {table_context.fully_qualified_name}")
532
540
  platform = self.platform.value
533
- template = self.jinja_env.get_template(
534
- SHOW_COLUMNS_QUERY_TEMPLATE_NAME_FORMAT.format(platform=platform)
535
- )
541
+ template = self.jinja_env.get_template(SHOW_COLUMNS_QUERY_TEMPLATE_NAME_FORMAT.format(platform=platform))
536
542
  database_name = table_context.database_name or ""
537
543
  return template.render(
538
- object_database_sql=(
539
- write_sql_name(database_name, platform) if database_name.strip() else ""
540
- ),
544
+ object_database_sql=(write_sql_name(database_name, platform) if database_name.strip() else ""),
541
545
  object_schema_sql=write_sql_name(table_context.schema_name, platform),
542
546
  object_name_sql=write_sql_name(table_context.internal_table_name, platform),
543
547
  )
@@ -582,9 +586,7 @@ class QueryGeneratorRedshift(QueryGeneratorBase):
582
586
  @staticmethod
583
587
  def _lowered_data_types(data_types: pd.Series) -> pd.Series:
584
588
  """Lower-case data-type spellings for the fixup masks, with missing values as ``""``."""
585
- return data_types.map(
586
- lambda value: str(value).lower() if value is not None and not pd.isna(value) else ""
587
- )
589
+ return data_types.map(lambda value: str(value).lower() if value is not None and not pd.isna(value) else "")
588
590
 
589
591
  def _apply_length_overrides(self, frame: pd.DataFrame, lowered_data_types: pd.Series) -> None:
590
592
  """Null the length of spatial and binary types, and set the HLLSKETCH length."""
@@ -592,25 +594,19 @@ class QueryGeneratorRedshift(QueryGeneratorBase):
592
594
  if length_column not in frame.columns:
593
595
  return
594
596
  frame.loc[lowered_data_types.isin(self._NULL_LENGTH_DATA_TYPES), length_column] = None
595
- frame.loc[lowered_data_types == RedshiftType.HLLSKETCH.lower(), length_column] = (
596
- REDSHIFT_HLLSKETCH_CHARACTER_MAXIMUM_LENGTH
597
- )
597
+ frame.loc[lowered_data_types == RedshiftType.HLLSKETCH.lower(), length_column] = REDSHIFT_HLLSKETCH_CHARACTER_MAXIMUM_LENGTH
598
598
 
599
599
  def _apply_float_precision(self, frame: pd.DataFrame, lowered_data_types: pd.Series) -> None:
600
600
  """Give float types the precision L1 compares, which ``SHOW COLUMNS`` does not report."""
601
601
  precision_column = SchemaValidationFields.NUMERIC_PRECISION.value
602
602
  if precision_column not in frame.columns:
603
603
  return
604
- frame.loc[lowered_data_types.isin(self._FLOAT_PRECISION_DATA_TYPES), precision_column] = (
605
- REDSHIFT_FLOAT_NUMERIC_PRECISION
606
- )
604
+ frame.loc[lowered_data_types.isin(self._FLOAT_PRECISION_DATA_TYPES), precision_column] = REDSHIFT_FLOAT_NUMERIC_PRECISION
607
605
 
608
606
  @staticmethod
609
607
  def _uppercased_data_types(data_types: pd.Series) -> pd.Series:
610
608
  """Upper-case data-type spellings, leaving missing values untouched."""
611
- return data_types.map(
612
- lambda value: str(value).upper() if value is not None and not pd.isna(value) else value
613
- )
609
+ return data_types.map(lambda value: str(value).upper() if value is not None and not pd.isna(value) else value)
614
610
 
615
611
  @staticmethod
616
612
  def _stamp_object_type(frame: pd.DataFrame, table_context: TableContext) -> None:
@@ -755,20 +751,22 @@ class QueryGeneratorRedshift(QueryGeneratorBase):
755
751
  raise ValueError(f"No normalization template found for data type {data_type} and no DEFAULT template available.")
756
752
  return normalization_template
757
753
 
758
- def _resolve_metrics_col_type(self, col, table_context: TableContext) -> str:
759
- """Key an Iceberg VARCHAR TIMESTAMP to the signed-year metrics (SNOW-4353618).
754
+ def _resolve_metrics_col_type(self, col: ColumnMetadata, table_context: TableContext) -> str:
755
+ """Key an Iceberg VARCHAR DATE / TIMESTAMP / TIMESTAMPTZ to the signed-year metrics.
760
756
 
761
757
  ``TO_CHAR 'YYYY'`` drops the era, so MIN / MAX would not match the text
762
- the UNLOAD staged. Native targets keep the shared TIMESTAMP template.
758
+ the UNLOAD staged (SNOW-4353618, SNOW-4381535). Native targets keep the
759
+ shared templates.
763
760
  """
764
761
  col_type = super()._resolve_metrics_col_type(col, table_context)
765
762
  if not IcebergProfile.from_table_context(table_context).is_active:
766
763
  return col_type
767
- if col_type.upper() not in _TIMESTAMP_BASE_TYPES:
764
+ signed_year_key = _SIGNED_YEAR_TEXT_METRICS_KEYS.get(col_type.upper())
765
+ if signed_year_key is None:
768
766
  return col_type
769
767
  if not is_snowflake_varchar_like_type(get_paired_target_column_types(table_context).get(col.name)):
770
768
  return col_type
771
- return TIMESTAMP_AS_TEXT_KEY
769
+ return signed_year_key
772
770
 
773
771
  def _resolve_normalization_templates(
774
772
  self,
@@ -265,6 +265,36 @@ VARCHAR_TIMESTAMP_SIGNED:
265
265
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
266
266
  metric_return_datatype: NUMBER
267
267
 
268
+ # Signed-year ISO DATE text (Redshift Iceberg, SNOW-4381535): TRY_TO_DATE alone is
269
+ # NULL for negative and 5+ digit years, so parse like the column comment's cast back.
270
+ VARCHAR_DATE_SIGNED:
271
+ min:
272
+ metric_query: 'MIN(IFF(TRY_TO_NUMBER(REGEXP_SUBSTR(TO_VARCHAR(TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), ''YYYY-MM-DD''), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0) = TRY_TO_NUMBER(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0), TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), NULL))'
273
+ metric_return_datatype: VARCHAR
274
+ metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD')
275
+ max:
276
+ metric_query: 'MAX(IFF(TRY_TO_NUMBER(REGEXP_SUBSTR(TO_VARCHAR(TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), ''YYYY-MM-DD''), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0) = TRY_TO_NUMBER(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0), TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), NULL))'
277
+ metric_return_datatype: VARCHAR
278
+ metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD')
279
+ count_null:
280
+ metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
281
+ metric_return_datatype: NUMBER
282
+
283
+ # Signed-year ISO TIMESTAMPTZ text (Redshift Iceberg, SNOW-4381535), staged in UTC.
284
+ # Parse like the column comment's cast back; TO_CHAR prints a zero offset as Z.
285
+ VARCHAR_TIMESTAMP_TZ_SIGNED:
286
+ min:
287
+ metric_query: 'MIN(DATEADD(nanosecond, DATEDIFF(nanosecond, ''00:00:00''::TIME, TRY_TO_TIME(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''T([0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?)'', 1, 1, ''e'', 1))), DATEADD(day, DATEDIFF(day, ''2000-01-01''::DATE, IFF(TRY_TO_NUMBER(REGEXP_SUBSTR(TO_VARCHAR(TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), ''YYYY-MM-DD''), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0) = TRY_TO_NUMBER(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0), TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), NULL)), TRY_TO_TIMESTAMP_TZ(''2000-01-01 00:00:00 '' || COALESCE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''([+-][0-9]{2}:[0-9]{2})$'', 1, 1, ''e'', 1), ''+00:00''), ''YYYY-MM-DD HH24:MI:SS TZH:TZM''))))'
288
+ metric_return_datatype: VARCHAR
289
+ metric_normalization: REGEXP_REPLACE(TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9TZH:TZM'), 'Z$', '+00:00')
290
+ max:
291
+ metric_query: 'MAX(DATEADD(nanosecond, DATEDIFF(nanosecond, ''00:00:00''::TIME, TRY_TO_TIME(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''T([0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?)'', 1, 1, ''e'', 1))), DATEADD(day, DATEDIFF(day, ''2000-01-01''::DATE, IFF(TRY_TO_NUMBER(REGEXP_SUBSTR(TO_VARCHAR(TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), ''YYYY-MM-DD''), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0) = TRY_TO_NUMBER(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+)-'', 1, 1, ''e'', 1), 38, 0), TRY_TO_DATE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''^(-?[0-9]+-[0-9]{2}-[0-9]{2})'', 1, 1, ''e'', 1)), NULL)), TRY_TO_TIMESTAMP_TZ(''2000-01-01 00:00:00 '' || COALESCE(REGEXP_SUBSTR(TRIM("{{ col_name }}"), ''([+-][0-9]{2}:[0-9]{2})$'', 1, 1, ''e'', 1), ''+00:00''), ''YYYY-MM-DD HH24:MI:SS TZH:TZM''))))'
292
+ metric_return_datatype: VARCHAR
293
+ metric_normalization: REGEXP_REPLACE(TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9TZH:TZM'), 'Z$', '+00:00')
294
+ count_null:
295
+ metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
296
+ metric_return_datatype: NUMBER
297
+
268
298
  # Order by UTC time-of-day. A plain MIN of the parsed instant uses today's date
269
299
  # and can cross midnight, so the formatted value would keep the wrong offset.
270
300
  VARCHAR_TIME_TZ:
@@ -13,7 +13,7 @@ TIME: LEFT(TO_CHAR("{{ col_name }}", 'HH24:MI:SS.FF9'), {{ time_text_length }})
13
13
  TIME WITH TIME ZONE: LEFT(TO_CHAR("{{ col_name }}", 'HH24:MI:SS.FF9'), {{ time_text_length }})
14
14
  # Typed Snowflake timestamps. The fractional-second digits are the Iceberg Parquet
15
15
  # format version (v2 micro FF6 / v3 nano FF9), substituted at render from
16
- # resolve_iceberg_fraction_digits; non-Iceberg paths default to FF9.
16
+ # resolve_iceberg_fraction_digits from iceberg_spec; a spec other than v2 stays FF9.
17
17
  TIMESTAMP_LTZ: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD"T"HH24:MI:SS.FF{{ fraction_digits }}')
18
18
  # Paired Oracle TIMESTAMP WITH LOCAL TIME ZONE: compare the retained instant in UTC.
19
19
  TIMESTAMP_LTZ_UTC: TO_CHAR(CONVERT_TIMEZONE('UTC', "{{ col_name }}"), 'YYYY-MM-DD"T"HH24:MI:SS.FF{{ fraction_digits }}')
@@ -521,7 +521,7 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
521
521
  write_identifier=self._write_sql_identifier,
522
522
  )
523
523
 
524
- def _resolve_metrics_col_type(self, col, table_context: TableContext) -> str:
524
+ def _resolve_metrics_col_type(self, col: ColumnMetadata, table_context: TableContext) -> str:
525
525
  paired = get_paired_source_column_types(table_context)
526
526
  paired_source = paired.get(col.name)
527
527
  target_base = normalize_snowflake_base_type(col.data_type)
@@ -532,12 +532,8 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
532
532
  CommonType.STRING,
533
533
  }:
534
534
  return CommonType.CHAR
535
- iso_tz_type = resolve_snowflake_iso_tz_varchar_metrics_type(
536
- col.data_type,
537
- paired_source,
538
- )
539
- if iso_tz_type:
540
- return iso_tz_type
535
+ # The platform's own clock text wins over the generic ISO TZ parser:
536
+ # Redshift TIMESTAMPTZ text carries a signed year TRY_TO_TIMESTAMP_TZ rejects.
541
537
  temporal_text_type = resolve_snowflake_varchar_temporal_metrics_type(
542
538
  col.data_type,
543
539
  paired_source,
@@ -545,6 +541,12 @@ class QueryGeneratorSnowflake(QueryGeneratorBase):
545
541
  )
546
542
  if temporal_text_type:
547
543
  return temporal_text_type
544
+ iso_tz_type = resolve_snowflake_iso_tz_varchar_metrics_type(
545
+ col.data_type,
546
+ paired_source,
547
+ )
548
+ if iso_tz_type:
549
+ return iso_tz_type
548
550
  if target_base in {CommonType.TEXT, CommonType.STRING}:
549
551
  return CommonType.VARCHAR
550
552
  return target_base or col.data_type
@@ -60,6 +60,11 @@ WITH rc_cte AS (
60
60
  -- MONTH). Returning ColumnLength here would fail L1 against the N/A
61
61
  -- target. The DAY/HOUR/MINUTE/SECOND/YEAR/MONTH codes therefore fall
62
62
  -- through to NULL below.
63
+ -- ColumnLength is a byte width. UNICODE (CharType 2) stores two bytes
64
+ -- per character, so CHAR, VARCHAR and CLOB report ColumnLength / 2.
65
+ -- LATIN is one byte per character and already matches. PERIOD widths
66
+ -- are the text form, not a character-set width, and stay as ColumnLength.
67
+ WHEN TRIM(C.ColumnType) IN ('CF', 'CV', 'CO') AND C.CharType = 2 THEN C.ColumnLength / 2
63
68
  WHEN TRIM(C.ColumnType) IN ('CF', 'CV', 'CO', 'PD', 'PM', 'PS', 'PT', 'PZ') THEN C.ColumnLength
64
69
  ELSE NULL
65
70
  END AS CHARACTER_MAXIMUM_LENGTH,
@@ -50,6 +50,7 @@ from snowflake.snowflake_data_validation.utils.iso_dv_common import get_paired_t
50
50
  from snowflake.snowflake_data_validation.utils.measure_collation import (
51
51
  SOURCE_CHARACTER_TYPES,
52
52
  )
53
+ from snowflake.snowflake_data_validation.utils.model.column_metadata import ColumnMetadata
53
54
  from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
54
55
  from snowflake.snowflake_data_validation.utils.teradata_string_rtrim import (
55
56
  teradata_rtrim_string_type,
@@ -380,7 +381,7 @@ class QueryGeneratorTeradata(QueryGeneratorBase):
380
381
  return normalization
381
382
  return None
382
383
 
383
- def _resolve_metrics_col_type(self, col, table_context: TableContext) -> str:
384
+ def _resolve_metrics_col_type(self, col: ColumnMetadata, table_context: TableContext) -> str:
384
385
  paired = get_paired_target_column_types(table_context)
385
386
  if is_teradata_timetz_timestamp_tz_pair(col.data_type, paired.get(col.name)):
386
387
  return CommonType.TIMESTAMP_WITH_TIME_ZONE
@@ -265,8 +265,7 @@ SNAPSHOT_METADATA_PARQUET_SCHEMAS_KEY = "parquetSchemas"
265
265
  ICEBERG_SPEC_KEY = "iceberg_spec"
266
266
  STORAGE_MODE_KEY = "storage_mode"
267
267
  LOAD_MODE_KEY = "load_mode"
268
- ICEBERG_FORMAT_VERSION_KEY = "iceberg_format_version"
269
- # Iceberg table format versions a Snowflake catalog reports (its ICEBERG_VERSION parameter)
268
+ # Catalog format versions ``iceberg_spec`` names. v2 renders FF6; v3 renders FF9.
270
269
  ICEBERG_FORMAT_VERSION_V2 = 2
271
270
  ICEBERG_FORMAT_VERSION_V3 = 3
272
271
 
@@ -7,9 +7,10 @@ Iceberg L3 normalization key overlays.
7
7
  Source/target SQL bridge overlays for Snowflake Iceberg tables under
8
8
  ``storageMode=compatible`` (v2/v3) and ``storageMode=native`` (v3 only):
9
9
 
10
- - v2 and v3: typed Snowflake timestamps stay on the default ``FF9`` templates.
11
- Every source renders nine fractional digits (zero-padded), so an ``FF6``
12
- target would never match; a value Iceberg truncated still mismatches.
10
+ - Typed Snowflake timestamps take their fraction from ``iceberg_spec``.
11
+ Validation fills that spec from the target table's ``ICEBERG_VERSION``
12
+ (``SHOW PARAMETERS``): ``v2`` renders microseconds (FF6), ``v3`` and any
13
+ other spec render nanoseconds (FF9).
13
14
  - Redshift ``TIMESTAMP`` / ``TIMESTAMPTZ`` land as ``VARCHAR`` on both specs and
14
15
  compare as the stored UNLOAD text.
15
16
  - Redshift flattened values → the same text emitted by migration UNLOAD.
@@ -27,6 +28,7 @@ above apply where native also stores ``VARCHAR``.
27
28
 
28
29
  from __future__ import annotations
29
30
 
31
+ from collections.abc import Mapping, Sequence
30
32
  from dataclasses import dataclass
31
33
  from typing import Protocol
32
34
 
@@ -34,10 +36,10 @@ from shared.datatypes.common import CommonType
34
36
  from shared.datatypes.redshift import RedshiftType
35
37
  from shared.datatypes.snowflake import SnowflakeType
36
38
  from shared.datatypes.teradata import TeradataType
37
- from shared.enums.iceberg import IcebergLoadMode
39
+ from shared.enums.iceberg import IcebergLoadMode, IcebergSpec
38
40
  from snowflake.snowflake_data_validation.utils.constants import (
39
- ICEBERG_FORMAT_VERSION_KEY,
40
41
  ICEBERG_FORMAT_VERSION_V2,
42
+ ICEBERG_FORMAT_VERSION_V3,
41
43
  ICEBERG_SPEC_KEY,
42
44
  LOAD_MODE_KEY,
43
45
  STORAGE_MODE_KEY,
@@ -227,9 +229,90 @@ def _as_str(value: object) -> str | None:
227
229
  return value if isinstance(value, str) else None
228
230
 
229
231
 
230
- def _as_format_version(value: object) -> int | None:
231
- # bool is an int subclass, so True would otherwise read as format version 1.
232
- return value if isinstance(value, int) and not isinstance(value, bool) else None
232
+ def _row_value(row: Mapping[object, object], column: str) -> object:
233
+ """Read one ``SHOW`` result cell by column name, case-insensitively."""
234
+ target = column.casefold()
235
+ return next((item for key, item in row.items() if str(key).casefold() == target), None)
236
+
237
+
238
+ def _catalog_version(value: object) -> int | None:
239
+ """Return 2 or 3 from a SHOW PARAMETERS ``value`` cell, or None."""
240
+ if isinstance(value, bool):
241
+ return None
242
+ if isinstance(value, int) and value in (ICEBERG_FORMAT_VERSION_V2, ICEBERG_FORMAT_VERSION_V3):
243
+ return value
244
+ if isinstance(value, str):
245
+ token = value.strip()
246
+ if token in {str(ICEBERG_FORMAT_VERSION_V2), str(ICEBERG_FORMAT_VERSION_V3)}:
247
+ return int(token)
248
+ return None
249
+
250
+
251
+ def iceberg_spec_from_show_rows(rows: object) -> IcebergSpec | None:
252
+ """Map a ``SHOW PARAMETERS`` ``ICEBERG_VERSION`` result onto ``iceberg_spec``.
253
+
254
+ The ``value`` column name is matched case-insensitively. ``2`` is ``v2``
255
+ and ``3`` is ``v3``. An empty result or any other value stays unset.
256
+ """
257
+ if isinstance(rows, (str, bytes)) or not isinstance(rows, Sequence) or not rows:
258
+ return None
259
+ row = rows[0]
260
+ if not isinstance(row, Mapping):
261
+ return None
262
+ version = _catalog_version(_row_value(row, "value"))
263
+ if version == ICEBERG_FORMAT_VERSION_V2:
264
+ return IcebergSpec.V2
265
+ if version == ICEBERG_FORMAT_VERSION_V3:
266
+ return IcebergSpec.V3
267
+ return None
268
+
269
+
270
+ def iceberg_flag_from_show_tables_rows(rows: object, table_name: str | None = None) -> bool | None:
271
+ """Read ``SHOW TABLES`` ``is_iceberg`` as True/False, or None when missing.
272
+
273
+ When ``table_name`` is provided, the matching ``name`` row is selected so
274
+ wildcard matches from ``LIKE`` cannot bleed into another table.
275
+ """
276
+ if isinstance(rows, (str, bytes)) or not isinstance(rows, Sequence) or not rows:
277
+ return None
278
+ if table_name is not None:
279
+ expected = table_name.casefold()
280
+ for row in rows:
281
+ if isinstance(row, Mapping):
282
+ row_name = _row_value(row, "name")
283
+ if isinstance(row_name, str) and row_name.casefold() == expected:
284
+ return _iceberg_flag_from_show_tables_row(row)
285
+ # A named table that LIKE did not return exactly stays unknown rather
286
+ # than inheriting a wildcard sibling's flag.
287
+ return None
288
+ first = rows[0]
289
+ if not isinstance(first, Mapping):
290
+ return None
291
+ return _iceberg_flag_from_show_tables_row(first)
292
+
293
+
294
+ _ICEBERG_FLAG_BY_TOKEN = {
295
+ "y": True, "yes": True, "true": True, "1": True,
296
+ "n": False, "no": False, "false": False, "0": False,
297
+ }
298
+
299
+
300
+ def _iceberg_flag_from_show_tables_row(row: Mapping[object, object]) -> bool | None:
301
+ """Map a ``SHOW TABLES`` ``is_iceberg`` cell (``Y``/``N``, bool, or ``0``/``1``) to a flag."""
302
+ value = _row_value(row, "is_iceberg")
303
+ if value is None:
304
+ return None
305
+ return _ICEBERG_FLAG_BY_TOKEN.get(str(value).strip().casefold())
306
+
307
+
308
+ def format_version_from_spec(iceberg_spec: object) -> int | None:
309
+ """Map ``iceberg_spec`` to the catalog format version it names."""
310
+ spec = IcebergSpec.parse(iceberg_spec)
311
+ if spec is IcebergSpec.V2:
312
+ return ICEBERG_FORMAT_VERSION_V2
313
+ if spec is IcebergSpec.V3:
314
+ return ICEBERG_FORMAT_VERSION_V3
315
+ return None
233
316
 
234
317
 
235
318
  _MICROSECOND_FRACTION_DIGITS = 6
@@ -239,10 +322,8 @@ _NANOSECOND_FRACTION_DIGITS = 9
239
322
  def resolve_iceberg_fraction_digits(is_iceberg: bool, iceberg_format_version: int | None = None) -> int:
240
323
  """Return the fractional-second digits a Snowflake timestamp renders under Iceberg.
241
324
 
242
- The micro/nano choice is the Iceberg Parquet format version read from the
243
- catalog: v2 truncates to microseconds (FF6), v3 keeps nanoseconds (FF9). A
244
- non-Iceberg target, or an Iceberg target whose format version the catalog
245
- did not report, renders the default nanosecond templates.
325
+ Spec v2 truncates to microseconds (FF6). v3, a missing spec, and a
326
+ non-Iceberg target render the default nanosecond templates.
246
327
  """
247
328
  if is_iceberg and iceberg_format_version == ICEBERG_FORMAT_VERSION_V2:
248
329
  return _MICROSECOND_FRACTION_DIGITS
@@ -264,17 +345,19 @@ class IcebergProfile:
264
345
 
265
346
  @classmethod
266
347
  def from_table_context(cls, table_context: IcebergTableContext) -> IcebergProfile:
267
- """Read the Iceberg flag and load mode from a table context's config.
348
+ """Read the Iceberg flag and load mode from a table context's spec.
268
349
 
269
- A value that is not a string (an unset attribute, a test double) reads as unset.
350
+ ``iceberg_spec`` is the catalog spec (``v2`` or ``v3``). A value that is
351
+ not a string (an unset attribute, a test double) reads as unset.
270
352
  """
353
+ spec = _as_str(getattr(table_context, ICEBERG_SPEC_KEY, None))
271
354
  return cls(
272
355
  is_iceberg=is_iceberg_dv_profile(
273
- _as_str(getattr(table_context, ICEBERG_SPEC_KEY, None)),
356
+ spec,
274
357
  _as_str(getattr(table_context, STORAGE_MODE_KEY, None)),
275
358
  ),
276
359
  load_mode=_as_str(getattr(table_context, LOAD_MODE_KEY, None)),
277
- iceberg_format_version=_as_format_version(getattr(table_context, ICEBERG_FORMAT_VERSION_KEY, None)),
360
+ iceberg_format_version=format_version_from_spec(spec),
278
361
  )
279
362
 
280
363
  @property
@@ -288,7 +371,7 @@ class IcebergProfile:
288
371
 
289
372
  @property
290
373
  def fraction_digits(self) -> int:
291
- """Fractional-second digits a Snowflake timestamp renders: FF6 for v2, else FF9."""
374
+ """Fractional-second digits a Snowflake timestamp renders: FF6 when the spec is v2, else FF9."""
292
375
  return resolve_iceberg_fraction_digits(self.is_iceberg, self.iceberg_format_version)
293
376
 
294
377