snowflake-data-validation 1.44.1__tar.gz → 1.45.1__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 (709) hide show
  1. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/PKG-INFO +55 -1
  2. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/README.md +54 -0
  3. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -5
  4. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +3 -0
  5. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +12 -1
  6. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -2
  7. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +6 -0
  8. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +3 -0
  9. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +14 -1
  10. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +6 -0
  11. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +2 -0
  12. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +3 -0
  13. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +3 -1
  14. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -1
  15. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +13 -4
  16. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +2 -0
  17. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +17 -6
  18. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +65 -17
  19. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +20 -11
  20. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +5 -1
  21. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -9
  22. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +2 -1
  23. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -2
  24. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -4
  25. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +10 -2
  26. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +13 -2
  27. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -1
  28. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/__init__.py +18 -0
  29. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/_internal.py +109 -26
  30. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +12 -2
  31. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +18 -0
  32. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -2
  33. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +18 -0
  34. snowflake_data_validation-1.45.1/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +375 -0
  35. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +21 -7
  36. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +10 -0
  37. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +123 -7
  38. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +67 -9
  39. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/query/time_precision_resolution.py +16 -1
  40. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +5 -8
  41. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -5
  42. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +1 -1
  43. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +1 -1
  44. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +13 -8
  45. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +7 -0
  46. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +1 -0
  47. snowflake_data_validation-1.45.1/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_show_columns_query.sql.j2 +2 -0
  48. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +173 -35
  49. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +1 -24
  50. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -1
  51. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +7 -2
  52. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -2
  53. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +5 -9
  54. snowflake_data_validation-1.45.1/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +16 -0
  55. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +2 -0
  56. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +56 -13
  57. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -4
  58. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -1
  59. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -7
  60. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +6 -0
  61. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +3 -0
  62. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +48 -9
  63. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -2
  64. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_tz_normalization.py +16 -7
  65. snowflake_data_validation-1.45.1/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_uniqueidentifier_normalization.py +32 -0
  66. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -6
  67. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +8 -2
  68. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +29 -12
  69. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +34 -5
  70. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/constants.py +19 -0
  71. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -8
  72. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +48 -53
  73. snowflake_data_validation-1.45.1/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +412 -0
  74. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +5 -12
  75. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +15 -5
  76. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +33 -8
  77. snowflake_data_validation-1.45.1/src/snowflake/snowflake_data_validation/validation/column_pairing.py +74 -0
  78. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +24 -0
  79. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +102 -6
  80. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -30
  81. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +22 -19
  82. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +22 -16
  83. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +29 -55
  84. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Postgresql/test_postgresql_collation.py +1 -0
  85. snowflake_data_validation-1.45.1/tests/unit/Postgresql/test_postgresql_enum_metadata.py +128 -0
  86. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Redshift/query/test_query_generator_redshift.py +98 -0
  87. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Redshift/test_redshift_collation.py +4 -4
  88. snowflake_data_validation-1.45.1/tests/unit/Redshift/test_redshift_columns_metadata_template.py +61 -0
  89. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +6 -3
  90. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Redshift/test_redshift_spatial_templates.py +23 -19
  91. snowflake_data_validation-1.45.1/tests/unit/Redshift/test_redshift_split_schema_query.py +234 -0
  92. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Redshift/test_redshift_super_normalization.py +8 -30
  93. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Teradata/test_query_generator_teradata.py +102 -0
  94. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Teradata/test_teradata_collation.py +1 -0
  95. snowflake_data_validation-1.45.1/tests/unit/Teradata/test_teradata_columns_metadata_precision_scale.py +99 -0
  96. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/azure_synapse/test_azure_synapse_l3_convert_normalization.py +2 -0
  97. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +5 -7
  98. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +112 -0
  99. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/bigquery/test_query_generator_bigquery.py +58 -0
  100. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/db2/test_db2_metadata_extractor.py +3 -6
  101. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/db2/test_db2_xml_long_metrics.py +1 -0
  102. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -4
  103. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -14
  104. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/oracle/test_oracle_query_generator.py +1 -0
  105. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/query/test_time_fraction_rendering.py +5 -2
  106. snowflake_data_validation-1.45.1/tests/unit/snowflake/test_snowflake_get_case_sensitive_columns.py +65 -0
  107. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -1
  108. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_full_ingest_utc.py +30 -16
  109. snowflake_data_validation-1.45.1/tests/unit/sqlserver/test_sqlserver_datetimeoffset_physical_target.py +177 -0
  110. snowflake_data_validation-1.45.1/tests/unit/sqlserver/test_sqlserver_l1_character_length.py +77 -0
  111. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlserver/test_sqlserver_l3_convert_normalization.py +2 -0
  112. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlserver/test_sqlserver_row_queries.py +157 -0
  113. snowflake_data_validation-1.45.1/tests/unit/sqlserver/test_sqlserver_uniqueidentifier_l3_normalization.py +153 -0
  114. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_accepted_transformation.py +36 -0
  115. snowflake_data_validation-1.45.1/tests/unit/test_case_sensitive_column_pairing.py +266 -0
  116. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_column_normalization_override.py +49 -1
  117. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_configuration_loader.py +11 -0
  118. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_configuration_model.py +10 -0
  119. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_data_validator.py +191 -0
  120. snowflake_data_validation-1.45.1/tests/unit/test_extraction_keeps_catalog_column_spelling.py +45 -0
  121. snowflake_data_validation-1.45.1/tests/unit/test_fetch_schema_metadata.py +154 -0
  122. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_float_bit_canonical.py +1 -1
  123. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_get_target_cols.py +45 -0
  124. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_helper_dataframe.py +3 -15
  125. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_helper_polars_cast.py +3 -5
  126. snowflake_data_validation-1.45.1/tests/unit/test_helper_polars_cast_threading.py +112 -0
  127. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_iceberg_dv_l3_normalization.py +267 -115
  128. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_iceberg_v2_metrics_exclusion.py +23 -11
  129. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_iso_dv_common.py +37 -2
  130. snowflake_data_validation-1.45.1/tests/unit/test_l2_count_distinct_opt_in_config.py +89 -0
  131. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_object_type_criterion.py +2 -2
  132. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_query_generator_numeric_scale.py +10 -1
  133. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_result_set_snapshot_generation.py +11 -1
  134. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_result_set_validator.py +59 -0
  135. snowflake_data_validation-1.45.1/tests/unit/test_schema_accepted_native_datatypes.py +291 -0
  136. snowflake_data_validation-1.45.1/tests/unit/test_schema_query_capability.py +93 -0
  137. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_source_validation_executor.py +27 -19
  138. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_spatial_wkt_canonicalization.py +2 -2
  139. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_sql_catalog_template_guard.py +5 -1
  140. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_sql_literal_jinja_filter.py +5 -8
  141. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_sync_executor_qvci_fallback.py +10 -2
  142. snowflake_data_validation-1.45.1/tests/unit/test_sync_schema_validation_real_callbacks.py +87 -0
  143. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_sync_validation_executor.py +11 -10
  144. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_table_configuration.py +6 -0
  145. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_table_metadata_processor.py +246 -0
  146. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_table_snapshot_generation.py +11 -6
  147. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_teradata_iso_normalization.py +34 -0
  148. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_teradata_type_code_mapping.py +19 -0
  149. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_validation_configuration.py +4 -0
  150. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_view_configuration.py +6 -0
  151. snowflake_data_validation-1.44.1/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -191
  152. snowflake_data_validation-1.44.1/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -55
  153. snowflake_data_validation-1.44.1/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -8
  154. snowflake_data_validation-1.44.1/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +0 -361
  155. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/.gitignore +0 -0
  156. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/LICENSE +0 -0
  157. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/docs/README.md +0 -0
  158. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/pyproject.toml +0 -0
  159. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
  160. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
  161. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
  162. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
  163. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
  164. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
  165. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
  166. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
  167. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
  168. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
  169. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
  170. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
  171. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
  172. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
  173. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
  174. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
  175. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
  176. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
  177. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
  178. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
  179. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +0 -0
  180. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +0 -0
  181. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +0 -0
  182. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
  183. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +0 -0
  184. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
  185. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
  186. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
  187. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
  188. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
  189. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
  190. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
  191. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
  192. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
  193. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
  194. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
  195. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
  196. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
  197. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
  198. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
  199. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/db2/db2_lob_normalization.py +0 -0
  200. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
  201. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
  202. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
  203. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +0 -0
  204. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +0 -0
  205. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +0 -0
  206. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
  207. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
  208. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
  209. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
  210. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +0 -0
  211. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
  212. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
  213. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
  214. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
  215. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
  216. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
  217. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
  218. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
  219. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
  220. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
  221. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +0 -0
  222. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
  223. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
  224. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
  225. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
  226. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +0 -0
  227. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
  228. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
  229. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/oracle_statement_functions.py +0 -0
  230. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
  231. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/oracle_xmltype.py +0 -0
  232. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
  233. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +0 -0
  234. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
  235. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
  236. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
  237. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
  238. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
  239. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
  240. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
  241. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
  242. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
  243. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
  244. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
  245. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
  246. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
  247. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
  248. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  249. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
  250. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
  251. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
  252. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
  253. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
  254. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
  255. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
  256. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
  257. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
  258. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
  259. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
  260. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
  261. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
  262. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
  263. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
  264. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
  265. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
  266. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
  267. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
  268. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
  269. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
  270. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
  271. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
  272. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
  273. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
  274. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
  275. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
  276. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
  277. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
  278. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
  279. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
  280. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
  281. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
  282. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
  283. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
  284. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
  285. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
  286. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
  287. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
  288. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
  289. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
  290. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
  291. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
  292. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
  293. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
  294. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
  295. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
  296. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
  297. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
  298. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
  299. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
  300. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
  301. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
  302. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
  303. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
  304. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
  305. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
  306. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/query/decimal_text_normalization.py +0 -0
  307. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
  308. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
  309. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
  310. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/query/float_aggregate_reduction.py +0 -0
  311. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +0 -0
  312. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +0 -0
  313. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
  314. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
  315. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/query/sql_type_families.py +0 -0
  316. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/query/tsql_float_remainder.py +0 -0
  317. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
  318. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
  319. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
  320. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
  321. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
  322. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
  323. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
  324. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
  325. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
  326. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
  327. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
  328. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
  329. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
  330. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
  331. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
  332. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
  333. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
  334. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
  335. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
  336. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
  337. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
  338. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
  339. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
  340. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
  341. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
  342. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
  343. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
  344. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/_wkt_despace.sql.j2 +0 -0
  345. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
  346. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
  347. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
  348. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +0 -0
  349. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
  350. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
  351. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
  352. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
  353. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
  354. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
  355. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
  356. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +0 -0
  357. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
  358. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
  359. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
  360. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
  361. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
  362. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
  363. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
  364. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
  365. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
  366. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
  367. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
  368. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
  369. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
  370. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
  371. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
  372. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
  373. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
  374. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
  375. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
  376. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
  377. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
  378. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
  379. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
  380. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
  381. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -0
  382. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
  383. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
  384. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
  385. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
  386. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
  387. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
  388. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
  389. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
  390. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
  391. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
  392. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
  393. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
  394. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
  395. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
  396. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
  397. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
  398. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
  399. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
  400. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
  401. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
  402. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
  403. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
  404. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
  405. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
  406. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
  407. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
  408. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
  409. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
  410. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_string_length_normalization.py +0 -0
  411. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
  412. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
  413. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
  414. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
  415. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
  416. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
  417. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
  418. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
  419. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
  420. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
  421. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
  422. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +0 -0
  423. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
  424. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
  425. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
  426. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +0 -0
  427. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
  428. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
  429. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
  430. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
  431. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
  432. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
  433. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
  434. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
  435. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
  436. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
  437. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
  438. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
  439. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
  440. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
  441. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
  442. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
  443. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
  444. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
  445. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
  446. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
  447. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
  448. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
  449. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
  450. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/dv_tracing.py +0 -0
  451. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/error_classifier.py +0 -0
  452. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
  453. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
  454. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
  455. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
  456. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
  457. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
  458. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
  459. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
  460. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/lob_source_types.py +0 -0
  461. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
  462. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
  463. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +0 -0
  464. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
  465. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
  466. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/model/column_selection.py +0 -0
  467. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
  468. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
  469. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
  470. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/period_common.py +0 -0
  471. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
  472. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +0 -0
  473. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
  474. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/row_validation_lob_exclusion.py +0 -0
  475. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
  476. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
  477. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
  478. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
  479. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
  480. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
  481. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +0 -0
  482. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
  483. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
  484. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
  485. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
  486. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
  487. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
  488. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
  489. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/object_type_criterion.py +0 -0
  490. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
  491. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
  492. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
  493. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
  494. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
  495. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
  496. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
  497. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
  498. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
  499. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
  500. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
  501. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
  502. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
  503. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
  504. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
  505. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
  506. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
  507. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
  508. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
  509. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
  510. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/.coveragerc +0 -0
  511. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/conftest.py +0 -0
  512. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/integration/.coveragerc +0 -0
  513. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
  514. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/integration/test_async_generation_integration.py +0 -0
  515. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/integration/test_async_validation_integration.py +0 -0
  516. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/integration/test_reference_integration.py +0 -0
  517. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/integration/test_source_validation_integration.py +0 -0
  518. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/integration/test_sync_validation_integration.py +0 -0
  519. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Postgresql/test_postgresql_bit_count_distinct.py +0 -0
  520. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Postgresql/test_postgresql_json_cell_validation.py +0 -0
  521. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Postgresql/test_postgresql_jsonb_row_hash.py +0 -0
  522. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
  523. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
  524. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
  525. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
  526. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Redshift/test_connector_redshift.py +0 -0
  527. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
  528. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Redshift/test_redshift_timetz_sentinel_normalization.py +0 -0
  529. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
  530. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Teradata/test_connector_teradata.py +0 -0
  531. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
  532. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Teradata/test_period_varchar_l1.py +0 -0
  533. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
  534. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
  535. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
  536. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
  537. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/__init__.py +0 -0
  538. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
  539. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
  540. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
  541. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
  542. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
  543. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
  544. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
  545. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
  546. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
  547. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
  548. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
  549. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
  550. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
  551. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
  552. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
  553. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/azure_synapse/__init__.py +0 -0
  554. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
  555. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
  556. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
  557. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
  558. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
  559. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/bigquery/__init__.py +0 -0
  560. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/bigquery/test_bigquery_l1_string_length.py +0 -0
  561. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
  562. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
  563. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/conftest.py +0 -0
  564. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/db2/__init__.py +0 -0
  565. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/db2/test_db2_lob_dv_generation.py +0 -0
  566. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/db2/test_db2_query_generator.py +0 -0
  567. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/db2/test_db2_registration.py +0 -0
  568. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/db2/test_db2_xml_long_dv_generation.py +0 -0
  569. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/oracle/__init__.py +0 -0
  570. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/oracle/test_oracle_configured_index_columns.py +0 -0
  571. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
  572. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
  573. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
  574. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
  575. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
  576. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
  577. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/oracle/test_oracle_quoted_identifiers.py +0 -0
  578. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
  579. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
  580. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
  581. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlite/__init__.py +0 -0
  582. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
  583. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
  584. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
  585. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +0 -0
  586. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
  587. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
  588. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlserver/__init__.py +0 -0
  589. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
  590. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_metrics_utc.py +0 -0
  591. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlserver/test_sqlserver_json.py +0 -0
  592. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -0
  593. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlserver/test_sqlserver_length_metrics_chars.py +0 -0
  594. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
  595. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
  596. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
  597. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlserver/test_sqlserver_string_length_pairing.py +0 -0
  598. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlserver/test_sqlserver_xml_image_metrics.py +0 -0
  599. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/sqlserver/test_tsql_integer_stddev_exact.py +0 -0
  600. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_arguments_manager_base.py +0 -0
  601. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_arguments_manager_factory.py +0 -0
  602. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_batched_metrics_queries.py +0 -0
  603. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
  604. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_catalog_column_size.py +0 -0
  605. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_catalog_queries_take_actual_names.py +0 -0
  606. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_cell_data_validator.py +0 -0
  607. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_cell_data_validator_threading.py +0 -0
  608. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_cell_validation_query_generation.py +0 -0
  609. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_charset_normalization.py +0 -0
  610. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_column_grouping.py +0 -0
  611. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_column_metadata.py +0 -0
  612. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_column_partitioning_strategy.py +0 -0
  613. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_column_selection.py +0 -0
  614. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_column_selection_actual_names.py +0 -0
  615. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_comparison_codec.py +0 -0
  616. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_comparison_orchestrator.py +0 -0
  617. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_configuration_file_editor.py +0 -0
  618. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_configuration_file_generator.py +0 -0
  619. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_configuration_file_synchronizer.py +0 -0
  620. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_connection_pool.py +0 -0
  621. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_connector_failure_tracker.py +0 -0
  622. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_connector_snowflake.py +0 -0
  623. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_cpu_optimizer.py +0 -0
  624. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_custom_templates_models.py +0 -0
  625. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_decimal_text_canonical.py +0 -0
  626. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_dv_tracing.py +0 -0
  627. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_error_classifier.py +0 -0
  628. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_escape_odbc_value.py +0 -0
  629. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_executor_factory.py +0 -0
  630. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_float_aggregate_reduction.py +0 -0
  631. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_float_canonical_templates.py +0 -0
  632. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_get_configuration_file.py +0 -0
  633. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_helper_io.py +0 -0
  634. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_helpers.py +0 -0
  635. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_html_report_builder.py +0 -0
  636. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_index_key_format.py +0 -0
  637. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_internal_helpers.py +0 -0
  638. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_interval_common.py +0 -0
  639. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_l2_collation_metadata.py +0 -0
  640. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_logging_config.py +0 -0
  641. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_metric_identifier_rendering.py +0 -0
  642. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_metrics_reshape.py +0 -0
  643. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_metrics_result_shape.py +0 -0
  644. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_metrics_templates_casts.py +0 -0
  645. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_metrics_tolerance.py +0 -0
  646. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_normalize_shape_aware.py +0 -0
  647. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_numeric_scale_resolution.py +0 -0
  648. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_parallel_execution_engine_fatal_errors.py +0 -0
  649. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_period_common.py +0 -0
  650. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_platform_bridge.py +0 -0
  651. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_postgresql_normalization_templates.py +0 -0
  652. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_postgresql_tz_normalization.py +0 -0
  653. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_pushdown_diff_sql.py +0 -0
  654. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_query_cell_level_validation.py +0 -0
  655. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_query_executor.py +0 -0
  656. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_query_metrics_level_validation.py +0 -0
  657. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_query_to_dataframe.py +0 -0
  658. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_query_validator.py +0 -0
  659. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_qvci_fallback.py +0 -0
  660. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
  661. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_qvci_fallback_triggers.py +0 -0
  662. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_redshift_native_timestamptz_ltz.py +0 -0
  663. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_report_metadata.py +0 -0
  664. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_result_set_cell_level_validation.py +0 -0
  665. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
  666. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_result_set_snapshot_validation.py +0 -0
  667. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_result_set_to_dataframe.py +0 -0
  668. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_row_count_bigint_overflow.py +0 -0
  669. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_row_data_validator.py +0 -0
  670. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_row_data_validator_empty_chunk.py +0 -0
  671. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_row_hash_column_delimiter.py +0 -0
  672. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_row_partitioning_strategy.py +0 -0
  673. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_row_validation_lob_exclusion.py +0 -0
  674. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_row_validation_report_buffer.py +0 -0
  675. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_schema_column_selection.py +0 -0
  676. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_shutdown_coordinator.py +0 -0
  677. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_signature_external_table.py +0 -0
  678. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_signature_row_md5_query.py +0 -0
  679. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_snapshot_validation_statements.py +0 -0
  680. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_snowflake_arguments_manager.py +0 -0
  681. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
  682. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_snowflake_redshift_super_size_guard.py +0 -0
  683. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_sqlite_validation_connection.py +0 -0
  684. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
  685. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
  686. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_table_column_metadata_model.py +0 -0
  687. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_table_context.py +0 -0
  688. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_table_snapshot_validation.py +0 -0
  689. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_target_platform_factory.py +0 -0
  690. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_telemetry.py +0 -0
  691. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_templates_loader_manager.py +0 -0
  692. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_teradata_string_rtrim_policy.py +0 -0
  693. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_teradata_timetz_metric_domain.py +0 -0
  694. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_timestamp_golden_vectors.py +0 -0
  695. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_trace_bridge.py +0 -0
  696. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_tsql_float_l2_aggregates.py +0 -0
  697. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_validation_database_connection.py +0 -0
  698. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_validation_execution_context.py +0 -0
  699. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_validation_progress_reporter.py +0 -0
  700. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_validation_report_buffer.py +0 -0
  701. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_validation_report_status.py +0 -0
  702. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_validation_templates_dto.py +0 -0
  703. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_vector_bit_normalization.py +0 -0
  704. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_vector_common.py +0 -0
  705. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_vector_normalization.py +0 -0
  706. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/test_warm_start.py +0 -0
  707. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/utils/__init__.py +0 -0
  708. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/tests/unit/utils/test_constants.py +0 -0
  709. {snowflake_data_validation-1.44.1 → snowflake_data_validation-1.45.1}/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.44.1
3
+ Version: 1.45.1
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/
@@ -154,6 +154,14 @@ Compares table structure between source and target:
154
154
  - Precision, scale, and length
155
155
  - Nullable constraints
156
156
 
157
+ Some differences are reported as `WARNING` and do not fail L1:
158
+ - Snowflake still holds every source value: a different column order, a Snowflake precision or scale that can hold the source's, and a `NOT NULL` source column whose Snowflake column is nullable (a Snowflake virtual column is always nullable).
159
+ - Snowflake may truncate or reject source values, so review it: a source character length longer than Snowflake's.
160
+
161
+ A nullable source column on a `NOT NULL` Snowflake column still fails, since Snowflake can reject the source's NULLs.
162
+
163
+ A PostgreSQL user-defined `ENUM` column is validated as `ENUM` against a Snowflake `VARCHAR`. `information_schema` reports every enum as `USER-DEFINED`, so the metadata queries read `pg_type.typtype` to tell enums apart, and report the longest label as the column's length. L2 and L3 compare the label text.
164
+
157
165
  ### Metrics Validation
158
166
  Compares statistical metrics for each column:
159
167
  - Row count
@@ -164,6 +172,10 @@ Compares statistical metrics for each column:
164
172
 
165
173
  For some types these metrics do not depend on the values themselves (for SQL Server: `VECTOR`, `XML`, `IMAGE`, `SQL_VARIANT`, `JSON`, `GEOGRAPHY`, `GEOMETRY`, `UNIQUEIDENTIFIER`), so a changed value can pass L2. Use L3 row validation to compare those columns' values. The per-type list is in `docs/data-migration-orchestrator/sqlserver-data-type-coverage.md` in this repo.
166
174
 
175
+ ### Column pairing (L1 and L2)
176
+
177
+ L1 and L2 read each column's catalog spelling rather than an upper-cased name, so the report shows PostgreSQL `order_id` and SQL Server `OrderId` as the catalog spells them. They pair a source column with its target column by the source platform's identifier rule, the same rule data migration uses: the exact name; on a case-insensitive source (SQL Server, Teradata, Redshift, Azure Synapse, BigQuery, SQLite) a name differing only by case; else the name as Snowflake reads it unquoted, so PostgreSQL `order_id` pairs with `ORDER_ID`. On Oracle, PostgreSQL and DB2, `MixedCase` and `mixedcase` are two columns, and a mixed-case source column whose target exists only as `MIXEDCASE` is reported missing from the target. A `column_mappings` key names a source column by the same rule: on Oracle the key `MixedCase` names `MIXEDCASE`, and `"MixedCase"` names `MixedCase`. Result-set and query inputs pair names exactly, else ignoring case.
178
+
167
179
  ### Views
168
180
 
169
181
  For **Redshift** and **Teradata** sources, views are validated on the view itself (no `CREATE TABLE AS SELECT` materialization in local sync mode). Other platforms may still materialize views to temporary tables before L1/L2/L3. **Teradata** views are read via `DBC.ColumnsQV` (Teradata's Query View Column Information catalog), so view L1 covers the full field set — column existence, datatype, precision, scale, length, nullability, and ordinal position — matching the table path. When `DBC.ColumnsQV` is unavailable (QVCI disabled → Teradata error 9719, missing `SELECT` grant, any other failure of that catalog query, or a degenerate result with null `DATA_TYPE`), the extractor falls back to `HELP COLUMN` with `basic_validation=True` and emits one WARNING schema row per view naming the trigger and the remediation. If HELP fails or source schema metadata still has no usable `DATA_TYPE` (including a view validated as a table whose `ColumnsV` types are null), L1 fails that object and does not continue to L2/L3. **Redshift** uses full schema metadata like tables.
@@ -214,6 +226,48 @@ For configuration options and examples, see the [official documentation](https:/
214
226
 
215
227
  ## Changelog
216
228
 
229
+ ### v1.45.1
230
+
231
+ **Improvements**
232
+
233
+ - Improved schema-level metadata retrieval by using `SHOW COLUMNS`.
234
+ - Improved Iceberg timestamp normalization to follow the target physical type.
235
+
236
+ **Bug fixes**
237
+
238
+ - Fixed schema validation failing for source columns whose names end in a space.
239
+ - Fixed BigQuery `ARRAY<INT64>` elements beyond 2^53 being compared as quoted JSON strings.
240
+ - Fixed validation never passing for a SQL Server `NOT NULL` computed column migrated as a Snowflake virtual column.
241
+ - Fixed L1 and L2 pairing of source and target columns to ignore case for case-sensitive sources when no target names are given.
242
+ - Fixed SQL Server Iceberg L1 schema validation reporting a missing Snowflake character length.
243
+ - Fixed Redshift `DATE`, `TIMESTAMP` and `TIMESTAMPTZ` values on Iceberg losing signed-year values.
244
+ - Fixed Teradata numeric L3 text exceeding the `TO_CHAR` digit limit.
245
+ - Fixed PostgreSQL `ENUM` columns surfacing as `USER-DEFINED`, so `ENUM` type rules never matched.
246
+ - Fixed Teradata column metadata not reporting precision and scale, which made `TIME` pairing fall back to 6.
247
+ - Fixed L1 failing `CHARACTER_MAXIMUM_LENGTH` for a SQL Server `xml` column migrated as `VARIANT`.
248
+
249
+ ### v1.45.0
250
+
251
+ **New features**
252
+
253
+ - Added support for applying custom L3 normalization per side, including `targetDataType: "*"` to target the mapped type.
254
+ - Added the `includeCountDistinct` option; L2 `COUNT(DISTINCT)` is now off by default and opt-in globally or per table.
255
+ - Added support for additional table and view types in data validation, including materialized views, temporary tables, BigQuery clones and snapshots, and DB2 materialized query tables.
256
+
257
+ **Improvements**
258
+
259
+ - Improved row comparison with positional column identity, so duplicate and case-variant column names no longer collapse.
260
+ - Improved Redshift connection resiliency with TCP keepalive defaults.
261
+ - Improved L1 validation to treat native integer bits-versus-digits precision differences as compatible, reported as a warning.
262
+
263
+ **Bug fixes**
264
+
265
+ - Fixed Oracle L2 metric rows and L3 cell frames upper-casing column names, which made mixed-case columns collide.
266
+ - Fixed L3 failing rows over a lowercase SQL Server `UNIQUEIDENTIFIER` or an ignored `FLOAT` `targetExpression`.
267
+ - Fixed a possible deadlock in expression casts when validators run on several threads.
268
+ - Fixed Redshift and PostgreSQL `REAL` values being compared against a non-exact widened value.
269
+ - Fixed Iceberg `FULL_INGEST` validation to follow the lossless-only temporal promotion of the load.
270
+
217
271
  ### v1.44.1
218
272
 
219
273
  **New features**
@@ -63,6 +63,14 @@ Compares table structure between source and target:
63
63
  - Precision, scale, and length
64
64
  - Nullable constraints
65
65
 
66
+ Some differences are reported as `WARNING` and do not fail L1:
67
+ - Snowflake still holds every source value: a different column order, a Snowflake precision or scale that can hold the source's, and a `NOT NULL` source column whose Snowflake column is nullable (a Snowflake virtual column is always nullable).
68
+ - Snowflake may truncate or reject source values, so review it: a source character length longer than Snowflake's.
69
+
70
+ A nullable source column on a `NOT NULL` Snowflake column still fails, since Snowflake can reject the source's NULLs.
71
+
72
+ A PostgreSQL user-defined `ENUM` column is validated as `ENUM` against a Snowflake `VARCHAR`. `information_schema` reports every enum as `USER-DEFINED`, so the metadata queries read `pg_type.typtype` to tell enums apart, and report the longest label as the column's length. L2 and L3 compare the label text.
73
+
66
74
  ### Metrics Validation
67
75
  Compares statistical metrics for each column:
68
76
  - Row count
@@ -73,6 +81,10 @@ Compares statistical metrics for each column:
73
81
 
74
82
  For some types these metrics do not depend on the values themselves (for SQL Server: `VECTOR`, `XML`, `IMAGE`, `SQL_VARIANT`, `JSON`, `GEOGRAPHY`, `GEOMETRY`, `UNIQUEIDENTIFIER`), so a changed value can pass L2. Use L3 row validation to compare those columns' values. The per-type list is in `docs/data-migration-orchestrator/sqlserver-data-type-coverage.md` in this repo.
75
83
 
84
+ ### Column pairing (L1 and L2)
85
+
86
+ L1 and L2 read each column's catalog spelling rather than an upper-cased name, so the report shows PostgreSQL `order_id` and SQL Server `OrderId` as the catalog spells them. They pair a source column with its target column by the source platform's identifier rule, the same rule data migration uses: the exact name; on a case-insensitive source (SQL Server, Teradata, Redshift, Azure Synapse, BigQuery, SQLite) a name differing only by case; else the name as Snowflake reads it unquoted, so PostgreSQL `order_id` pairs with `ORDER_ID`. On Oracle, PostgreSQL and DB2, `MixedCase` and `mixedcase` are two columns, and a mixed-case source column whose target exists only as `MIXEDCASE` is reported missing from the target. A `column_mappings` key names a source column by the same rule: on Oracle the key `MixedCase` names `MIXEDCASE`, and `"MixedCase"` names `MixedCase`. Result-set and query inputs pair names exactly, else ignoring case.
87
+
76
88
  ### Views
77
89
 
78
90
  For **Redshift** and **Teradata** sources, views are validated on the view itself (no `CREATE TABLE AS SELECT` materialization in local sync mode). Other platforms may still materialize views to temporary tables before L1/L2/L3. **Teradata** views are read via `DBC.ColumnsQV` (Teradata's Query View Column Information catalog), so view L1 covers the full field set — column existence, datatype, precision, scale, length, nullability, and ordinal position — matching the table path. When `DBC.ColumnsQV` is unavailable (QVCI disabled → Teradata error 9719, missing `SELECT` grant, any other failure of that catalog query, or a degenerate result with null `DATA_TYPE`), the extractor falls back to `HELP COLUMN` with `basic_validation=True` and emits one WARNING schema row per view naming the trigger and the remediation. If HELP fails or source schema metadata still has no usable `DATA_TYPE` (including a view validated as a table whose `ColumnsV` types are null), L1 fails that object and does not continue to L2/L3. **Redshift** uses full schema metadata like tables.
@@ -123,6 +135,48 @@ For configuration options and examples, see the [official documentation](https:/
123
135
 
124
136
  ## Changelog
125
137
 
138
+ ### v1.45.1
139
+
140
+ **Improvements**
141
+
142
+ - Improved schema-level metadata retrieval by using `SHOW COLUMNS`.
143
+ - Improved Iceberg timestamp normalization to follow the target physical type.
144
+
145
+ **Bug fixes**
146
+
147
+ - Fixed schema validation failing for source columns whose names end in a space.
148
+ - Fixed BigQuery `ARRAY<INT64>` elements beyond 2^53 being compared as quoted JSON strings.
149
+ - Fixed validation never passing for a SQL Server `NOT NULL` computed column migrated as a Snowflake virtual column.
150
+ - Fixed L1 and L2 pairing of source and target columns to ignore case for case-sensitive sources when no target names are given.
151
+ - Fixed SQL Server Iceberg L1 schema validation reporting a missing Snowflake character length.
152
+ - Fixed Redshift `DATE`, `TIMESTAMP` and `TIMESTAMPTZ` values on Iceberg losing signed-year values.
153
+ - Fixed Teradata numeric L3 text exceeding the `TO_CHAR` digit limit.
154
+ - Fixed PostgreSQL `ENUM` columns surfacing as `USER-DEFINED`, so `ENUM` type rules never matched.
155
+ - Fixed Teradata column metadata not reporting precision and scale, which made `TIME` pairing fall back to 6.
156
+ - Fixed L1 failing `CHARACTER_MAXIMUM_LENGTH` for a SQL Server `xml` column migrated as `VARIANT`.
157
+
158
+ ### v1.45.0
159
+
160
+ **New features**
161
+
162
+ - Added support for applying custom L3 normalization per side, including `targetDataType: "*"` to target the mapped type.
163
+ - Added the `includeCountDistinct` option; L2 `COUNT(DISTINCT)` is now off by default and opt-in globally or per table.
164
+ - Added support for additional table and view types in data validation, including materialized views, temporary tables, BigQuery clones and snapshots, and DB2 materialized query tables.
165
+
166
+ **Improvements**
167
+
168
+ - Improved row comparison with positional column identity, so duplicate and case-variant column names no longer collapse.
169
+ - Improved Redshift connection resiliency with TCP keepalive defaults.
170
+ - Improved L1 validation to treat native integer bits-versus-digits precision differences as compatible, reported as a warning.
171
+
172
+ **Bug fixes**
173
+
174
+ - Fixed Oracle L2 metric rows and L3 cell frames upper-casing column names, which made mixed-case columns collide.
175
+ - Fixed L3 failing rows over a lowercase SQL Server `UNIQUEIDENTIFIER` or an ignored `FLOAT` `targetExpression`.
176
+ - Fixed a possible deadlock in expression casts when validators run on several threads.
177
+ - Fixed Redshift and PostgreSQL `REAL` values being compared against a non-exact widened value.
178
+ - Fixed Iceberg `FULL_INGEST` validation to follow the lossless-only temporal promotion of the load.
179
+
126
180
  ### v1.44.1
127
181
 
128
182
  **New features**
@@ -78,13 +78,11 @@ class MetadataExtractorAzureSynapse(MetadataExtractorBase):
78
78
  def process_schema_query_result(
79
79
  self,
80
80
  result: list,
81
- apply_column_validated_uppercase: bool = True,
82
81
  ) -> pd.DataFrame:
83
82
  """Process schema query results into a DataFrame for Azure Synapse.
84
83
 
85
84
  Args:
86
85
  result: Query result containing (columns_names, data_rows).
87
- apply_column_validated_uppercase: Whether to uppercase column names.
88
86
 
89
87
  Returns:
90
88
  pd.DataFrame: Processed DataFrame with schema metadata.
@@ -94,7 +92,6 @@ class MetadataExtractorAzureSynapse(MetadataExtractorBase):
94
92
  df = self.helper_dataframe.process_query_result_to_dataframe(
95
93
  columns_names=list(columns_names),
96
94
  data_rows=list(metadata_info),
97
- apply_column_validated_uppercase=apply_column_validated_uppercase,
98
95
  sort_and_reset_index=True,
99
96
  )
100
97
  if COLUMN_DATATYPE in df.columns:
@@ -115,7 +112,6 @@ class MetadataExtractorAzureSynapse(MetadataExtractorBase):
115
112
  return self.helper_dataframe.process_query_result_to_dataframe(
116
113
  columns_names=list(result_columns),
117
114
  data_rows=list(result_data),
118
- apply_column_validated_uppercase=True,
119
115
  sort_and_reset_index=True,
120
116
  )
121
117
 
@@ -173,6 +169,5 @@ class MetadataExtractorAzureSynapse(MetadataExtractorBase):
173
169
  return self.helper_dataframe.process_query_result_to_dataframe(
174
170
  columns_names=list(result_columns),
175
171
  data_rows=list(result),
176
- apply_column_validated_uppercase=False,
177
172
  sort_and_reset_index=False,
178
173
  )
@@ -52,6 +52,9 @@ NVARCHAR: '"{{ col_name }}"'
52
52
  DATE: CONVERT(VARCHAR(10), "{{ col_name }}", 23)
53
53
  # Same text as SQL Server TIME: hh:mi:ss.fffffff + '00', cut to {{ time_text_length }}.
54
54
  TIME: LEFT(SUBSTRING(CONVERT(VARCHAR(27), CAST("{{ col_name }}" AS DATETIME2(7)), 121), 12, 16) + '00', {{ time_text_length }})
55
+ # Iceberg compatible TIME stored as VARCHAR (CETAS): the extract's own text, TIME(7)
56
+ # widened then '00', nine digits whatever the scale. '+' keeps NULL as NULL.
57
+ TIME_ICEBERG: CAST(CAST("{{ col_name }}" AS TIME(7)) AS VARCHAR(16)) + '00'
55
58
  DATETIME: STUFF(CONVERT(VARCHAR(27), CAST(CAST("{{ col_name }}" AS DATETIME2(3)) AS DATETIME2(7)), 121), 11, 1, 'T') + '00'
56
59
  DATETIME2: LEFT(STUFF(CONVERT(VARCHAR(27), CAST("{{ col_name }}" AS DATETIME2(7)), 121), 11, 1, 'T'), 26) + '000'
57
60
  SMALLDATETIME: CONVERT(VARCHAR(19), "{{ col_name }}", 126) + '.000000000'
@@ -53,6 +53,11 @@ from snowflake.snowflake_data_validation.sqlserver.query.charset_normalization i
53
53
  from snowflake.snowflake_data_validation.utils.constants import (
54
54
  Platform,
55
55
  )
56
+ from snowflake.snowflake_data_validation.utils.iceberg_dv_common import (
57
+ IcebergProfile,
58
+ resolve_iceberg_compatible_tsql_source_normalization_key,
59
+ )
60
+ from snowflake.snowflake_data_validation.utils.iso_dv_common import get_paired_target_column_types
56
61
  from snowflake.snowflake_data_validation.utils.measure_collation import (
57
62
  TSQL_ROW_HASH_COLLATION_SUFFIX,
58
63
  tsql_comparison_collation_tokens,
@@ -141,8 +146,14 @@ class QueryGeneratorAzureSynapse(TsqlFloatMetricModifierMixin, QueryGeneratorBas
141
146
  datatypes_normalization_templates = table_context.templates_loader_manager.datatypes_normalization_templates
142
147
  rendered: dict[str, str] = {}
143
148
  renderer_columns = self._row_md5_normalization_columns(table_context)
149
+ paired_target_types = get_paired_target_column_types(table_context)
150
+ is_iceberg = IcebergProfile.from_table_context(table_context).is_active
144
151
  for column in renderer_columns:
145
- lookup_key = (column.data_type or "").strip().upper()
152
+ lookup_key = resolve_iceberg_compatible_tsql_source_normalization_key(
153
+ (column.data_type or "").strip().upper(),
154
+ paired_target_type=paired_target_types.get(column.name),
155
+ is_iceberg=is_iceberg,
156
+ )
146
157
  normalization_template = self._lookup_normalization_template(
147
158
  datatypes_normalization_templates,
148
159
  lookup_key,
@@ -99,7 +99,6 @@ class ScriptWriterAzureSynapse(ScriptWriterBase):
99
99
  return self.helper_dataframe.process_query_result_to_dataframe(
100
100
  columns_names=result_columns,
101
101
  data_rows=result,
102
- apply_column_validated_uppercase=False,
103
102
  sort_and_reset_index=False,
104
103
  )
105
104
 
@@ -137,6 +136,5 @@ class ScriptWriterAzureSynapse(ScriptWriterBase):
137
136
  return self.helper_dataframe.process_query_result_to_dataframe(
138
137
  columns_names=list(result_columns),
139
138
  data_rows=list(result),
140
- apply_column_validated_uppercase=False,
141
139
  sort_and_reset_index=False,
142
140
  )
@@ -82,6 +82,12 @@ TIMESTAMP: FORMAT_TIMESTAMP('%E4Y-%m-%dT%H:%M:%E9S%Ez', `{{ col_name }}`, 'UTC')
82
82
  ARRAY: NULLIF(TO_JSON_STRING(PARSE_JSON(TO_JSON_STRING(`{{ col_name }}`))), 'null')
83
83
  STRUCT: NULLIF(TO_JSON_STRING(PARSE_JSON(TO_JSON_STRING(`{{ col_name }}`))), 'null')
84
84
  JSON: NULLIF(TO_JSON_STRING(PARSE_JSON(TO_JSON_STRING(`{{ col_name }}`))), 'null')
85
+ # An ARRAY / STRUCT holding no NUMERIC / BIGNUMERIC (QueryGeneratorBigQuery picks this key)
86
+ # goes through TO_JSON, as data migration extracts it: TO_JSON_STRING quotes an INT64 beyond
87
+ # +/-2^53, while TO_JSON keeps it the number Snowflake holds. TO_JSON sorts object keys
88
+ # itself, so no PARSE_JSON round trip. One holding a decimal keeps the keys above, since
89
+ # TO_JSON rounds a wide NUMERIC to FLOAT64.
90
+ NESTED_TO_JSON: NULLIF(TO_JSON_STRING(TO_JSON(`{{ col_name }}`)), 'null')
85
91
  # Spatial → WKT for L3 hashing. BigQuery ST_ASTEXT may emit "POINT (x y)" (space after
86
92
  # the type keyword) and ", " between vertices; Snowflake ST_ASWKT does not. Canonicalize
87
93
  # with chained REPLACE — preserve SQL NULL so null rows use the shared L3 sentinel.
@@ -48,7 +48,10 @@ WITH rc_cte AS (
48
48
  (
49
49
  SELECT CASE table_type
50
50
  WHEN 'BASE TABLE' THEN 'TABLE'
51
+ WHEN 'CLONE' THEN 'TABLE'
52
+ WHEN 'SNAPSHOT' THEN 'TABLE'
51
53
  WHEN 'VIEW' THEN 'VIEW'
54
+ WHEN 'MATERIALIZED VIEW' THEN 'VIEW'
52
55
  ELSE 'UNKNOWN'
53
56
  END
54
57
  FROM {{ object_database_sql }}.{{ object_schema_sql }}.INFORMATION_SCHEMA.TABLES
@@ -17,7 +17,7 @@ from __future__ import annotations
17
17
 
18
18
  import logging
19
19
 
20
- from shared.datatypes.bigquery import BigQueryType
20
+ from shared.datatypes.bigquery import BigQueryType, serializes_exactly_through_to_json
21
21
  from shared.datatypes.common import CommonType
22
22
  from shared.datatypes.snowflake import SnowflakeType
23
23
  from snowflake.snowflake_data_validation.query.decimal_text_normalization import (
@@ -46,6 +46,7 @@ from snowflake.snowflake_data_validation.utils.model.table_context import TableC
46
46
  from snowflake.snowflake_data_validation.validation.comparison_codec import (
47
47
  ComparisonCodec,
48
48
  apply_text_codec_to_renderer_templates,
49
+ has_custom_column_normalization,
49
50
  resolve_column_normalization_template,
50
51
  )
51
52
 
@@ -55,6 +56,9 @@ LOGGER = logging.getLogger(__name__)
55
56
  _WIDE_NUMERIC_BASE_TYPES = frozenset({BigQueryType.BIGNUMERIC, BigQueryType.BIGDECIMAL})
56
57
  # Normalization key for a BIGNUMERIC / BIGDECIMAL whose Snowflake mirror is DECFLOAT.
57
58
  BIGNUMERIC_DECFLOAT_NORMALIZATION_KEY = "BIGNUMERIC_DECFLOAT"
59
+ # Normalization key for an ARRAY / STRUCT holding no NUMERIC / BIGNUMERIC, which data
60
+ # migration serializes through TO_JSON so a wide INT64 lands as a number.
61
+ NESTED_TO_JSON_NORMALIZATION_KEY = "NESTED_TO_JSON"
58
62
 
59
63
 
60
64
  def build_bigquery_float_bit_canonical_expr(col_ref: str) -> str:
@@ -239,6 +243,15 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
239
243
  base_type = self.normalize_bigquery_type(column.data_type)
240
244
  if self._lands_in_decfloat(column, table_context):
241
245
  base_type = BIGNUMERIC_DECFLOAT_NORMALIZATION_KEY
246
+ elif serializes_exactly_through_to_json(column.data_type) and not has_custom_column_normalization(
247
+ column.name,
248
+ base_type,
249
+ column_normalization_map=None,
250
+ templates_loader_manager=table_context.templates_loader_manager,
251
+ ):
252
+ # A workflow or custom-YAML override of ``ARRAY`` / ``STRUCT`` wins over the
253
+ # built-in TO_JSON text; a per-column rule replaces the template afterwards.
254
+ base_type = NESTED_TO_JSON_NORMALIZATION_KEY
242
255
  normalization_template = datatypes_normalization_templates.get(base_type)
243
256
  if normalization_template is None:
244
257
  LOGGER.debug(
@@ -96,6 +96,7 @@ class ConfigurationModel(BaseModel):
96
96
  self._check_max_failed_rows_number(table)
97
97
  self._check_chunk_number(table)
98
98
  self.set_exclude_metrics(table)
99
+ self.set_include_count_distinct(table)
99
100
  self.set_apply_metric_column_modifier(table)
100
101
  self.set_include_lob_columns_in_row_validation(table)
101
102
 
@@ -113,6 +114,7 @@ class ConfigurationModel(BaseModel):
113
114
  self._check_max_failed_rows_number(view)
114
115
  self._check_chunk_number(view)
115
116
  self.set_exclude_metrics(view)
117
+ self.set_include_count_distinct(view)
116
118
  self.set_apply_metric_column_modifier(view)
117
119
  self.set_include_lob_columns_in_row_validation(view)
118
120
 
@@ -198,6 +200,10 @@ class ConfigurationModel(BaseModel):
198
200
  if table.exclude_metrics is None:
199
201
  table.exclude_metrics = self.validation_configuration.exclude_metrics
200
202
 
203
+ def set_include_count_distinct(self, table: TableConfiguration) -> None:
204
+ if table.include_count_distinct is None:
205
+ table.include_count_distinct = self.validation_configuration.include_count_distinct
206
+
201
207
  def set_include_lob_columns_in_row_validation(self, table: TableConfiguration) -> None:
202
208
  if table.include_lob_columns_in_row_validation is None:
203
209
  table.include_lob_columns_in_row_validation = (
@@ -32,6 +32,7 @@ VISIBLE_PROPERTIES: set[str] = {
32
32
  "chunk_number",
33
33
  "column_mappings",
34
34
  "exclude_metrics",
35
+ "include_count_distinct",
35
36
  "include_lob_columns_in_row_validation",
36
37
  "index_column_list",
37
38
  "max_failed_rows_number",
@@ -83,6 +84,7 @@ class TableConfiguration(BaseModel):
83
84
  column_mappings: dict[str, str] = {}
84
85
  max_failed_rows_number: int | None = None
85
86
  exclude_metrics: bool | None = None
87
+ include_count_distinct: bool | None = None
86
88
  apply_metric_column_modifier: bool | None = None
87
89
  include_lob_columns_in_row_validation: bool | None = None
88
90
  object_type: ObjectType = ObjectType.TABLE
@@ -41,6 +41,9 @@ class ValidationConfiguration(BaseModel):
41
41
  custom_templates_path: Path | None = None
42
42
  max_failed_rows_number: int = MAX_FAILED_ROWS_NUMBER_DEFAULT_VALUE
43
43
  exclude_metrics: bool = False
44
+ # L2 COUNT(DISTINCT) is opt-in (SNOW-4338258): it dominates L2 cost on the source
45
+ # (one SQL Server batch 26.4 s with it, 1.4 s without) and L2 is the fast metrics level.
46
+ include_count_distinct: bool = False
44
47
  apply_metric_column_modifier: bool = True
45
48
  include_lob_columns_in_row_validation: bool = False
46
49
 
@@ -49,13 +49,15 @@ SELECT
49
49
  (
50
50
  SELECT CASE TYPE
51
51
  WHEN 'T' THEN 'TABLE'
52
+ WHEN 'G' THEN 'TABLE'
52
53
  WHEN 'V' THEN 'VIEW'
54
+ WHEN 'S' THEN 'VIEW'
53
55
  ELSE 'UNKNOWN'
54
56
  END
55
57
  FROM SYSCAT.TABLES
56
58
  WHERE TABSCHEMA = '{{ object_schema | escape_sql_literal }}'
57
59
  AND TABNAME = '{{ object_name | escape_sql_literal }}'
58
- AND TYPE IN ('T', 'V')
60
+ AND TYPE IN ('T', 'G', 'V', 'S')
59
61
  ) AS OBJECT_TYPE,
60
62
  rc.ROW_COUNT
61
63
  FROM SYSCAT.COLUMNS C
@@ -88,6 +88,5 @@ class ScriptWriterDb2(ScriptWriterOracle):
88
88
  return self.helper_dataframe.process_query_result_to_dataframe(
89
89
  columns_names=result_columns,
90
90
  data_rows=result,
91
- apply_column_validated_uppercase=False,
92
91
  sort_and_reset_index=False,
93
92
  )
@@ -66,19 +66,28 @@ class AsyncGenerationExecutor(BaseValidationExecutor):
66
66
 
67
67
  """
68
68
  try:
69
- source_query = data_validation_api.generate_schema_query(source_table_context)
70
- target_query = data_validation_api.generate_schema_query(target_table_context)
69
+ from snowflake.snowflake_data_validation.public.model import GeneratedQuery
70
+ from snowflake.snowflake_data_validation.public.query_generation.schema_metrics_queries import (
71
+ schema_queries_as_script_sql,
72
+ )
73
+
74
+ source_script = schema_queries_as_script_sql(
75
+ data_validation_api.generate_schema_queries(source_table_context)
76
+ )
77
+ target_script = schema_queries_as_script_sql(
78
+ data_validation_api.generate_schema_queries(target_table_context)
79
+ )
71
80
 
72
81
  data_validation_api.write_schema_query_to_script(
73
82
  table_context=source_table_context,
74
- generated_query=source_query,
83
+ generated_query=GeneratedQuery(query_string=source_script),
75
84
  output_directory=self.source_extractor.report_path,
76
85
  timestamp=self.context.run_start_time,
77
86
  )
78
87
 
79
88
  data_validation_api.write_schema_query_to_script(
80
89
  table_context=target_table_context,
81
- generated_query=target_query,
90
+ generated_query=GeneratedQuery(query_string=target_script),
82
91
  output_directory=self.source_extractor.report_path,
83
92
  timestamp=self.context.run_start_time,
84
93
  )
@@ -234,6 +234,7 @@ class BaseValidationExecutor(ABC):
234
234
  columns=source_table_column_metadata.columns,
235
235
  database_name=configured_object_name(self.context.source_platform, table_configuration.source_database),
236
236
  exclude_metrics=table_configuration.exclude_metrics,
237
+ include_count_distinct=bool(table_configuration.include_count_distinct),
237
238
  fully_qualified_name=table_configuration.fully_qualified_name,
238
239
  has_where_clause=table_configuration.has_where_clause,
239
240
  max_failed_rows_number=table_configuration.max_failed_rows_number,
@@ -279,6 +280,7 @@ class BaseValidationExecutor(ABC):
279
280
  columns=target_table_column_metadata.columns,
280
281
  database_name=configured_object_name(self.context.target_platform, table_configuration.target_database),
281
282
  exclude_metrics=table_configuration.exclude_metrics,
283
+ include_count_distinct=bool(table_configuration.include_count_distinct),
282
284
  fully_qualified_name=table_configuration.target_fully_qualified_name,
283
285
  has_where_clause=table_configuration.has_target_where_clause,
284
286
  max_failed_rows_number=table_configuration.max_failed_rows_number,
@@ -128,6 +128,7 @@ class SourceValidationExecutor:
128
128
  columns=source_table_column_metadata.columns,
129
129
  database_name=configured_object_name(self.context.source_platform, table_configuration.source_database),
130
130
  exclude_metrics=table_configuration.exclude_metrics,
131
+ include_count_distinct=bool(table_configuration.include_count_distinct),
131
132
  fully_qualified_name=table_configuration.fully_qualified_name,
132
133
  has_where_clause=table_configuration.has_where_clause,
133
134
  max_failed_rows_number=table_configuration.max_failed_rows_number,
@@ -159,13 +160,23 @@ class SourceValidationExecutor:
159
160
  source_table_context: Source table context
160
161
 
161
162
  """
162
- generated_query = data_validation_api.generate_schema_query(source_table_context)
163
- query_result = data_validation_api.execute_query(
164
- table_context=source_table_context,
165
- connector=self.source_extractor.connector,
166
- generated_query=generated_query,
163
+ from snowflake.snowflake_data_validation.public.model import GeneratedQuery
164
+ from snowflake.snowflake_data_validation.public.model.query_generator_factory import (
165
+ QueryGeneratorFactory,
166
+ )
167
+
168
+ queries = data_validation_api.generate_schema_queries(source_table_context)
169
+ generator = QueryGeneratorFactory.create(source_table_context.platform)
170
+ schema_df = data_validation_api.fetch_schema_metadata(
171
+ queries,
172
+ lambda sql: data_validation_api.execute_query(
173
+ table_context=source_table_context,
174
+ connector=self.source_extractor.connector,
175
+ generated_query=GeneratedQuery(query_string=sql),
176
+ ).dataframe,
177
+ generator,
178
+ source_table_context,
167
179
  )
168
- schema_df = query_result.dataframe
169
180
 
170
181
  output_path = self._get_output_path("schema", source_table_context)
171
182
  self._save_dataframe_as_parquet(schema_df, output_path)
@@ -28,10 +28,15 @@ public workflow API module:
28
28
 
29
29
  import hashlib
30
30
 
31
+ from collections.abc import Callable
31
32
  from concurrent.futures import ThreadPoolExecutor
33
+ from typing import Any
32
34
 
33
35
  import pandas as pd
34
36
 
37
+ from snowflake.snowflake_data_validation.connector.connector_base import (
38
+ ConnectorBase,
39
+ )
35
40
  from snowflake.snowflake_data_validation.executer.base_validation_executor import (
36
41
  BaseValidationExecutor,
37
42
  )
@@ -41,6 +46,7 @@ from snowflake.snowflake_data_validation.public import (
41
46
  from snowflake.snowflake_data_validation.public.model import (
42
47
  ConfigurationError,
43
48
  DataValidationExceptionError,
49
+ GeneratedQuery,
44
50
  MetricsValidationError,
45
51
  QueryExecutionResult,
46
52
  SchemaValidationError,
@@ -83,6 +89,20 @@ from snowflake.snowflake_data_validation.validation.validation_report_buffer imp
83
89
  )
84
90
 
85
91
 
92
+ # ``execute_query``'s ``result_processor(raw_result, apply_column_validated_uppercase)``.
93
+ SchemaResultProcessor = Callable[[list[Any], bool], pd.DataFrame]
94
+
95
+
96
+ def _ignoring_case_flag(process: Callable[[list], pd.DataFrame]) -> Callable[[list, bool], pd.DataFrame]:
97
+ """Adapt an extractor's one-argument result callback to ``execute_query``'s processor contract.
98
+
99
+ ``execute_query`` calls ``result_processor(raw_result, apply_column_validated_uppercase)``.
100
+ The extractors take the raw result alone: they keep each column's catalog
101
+ spelling, and the validators pair names by the source's identifier rule.
102
+ """
103
+ return lambda result, _apply_column_validated_uppercase: process(result)
104
+
105
+
86
106
  class SyncValidationExecutor(BaseValidationExecutor):
87
107
  """Executor for synchronous validation operations.
88
108
 
@@ -99,6 +119,24 @@ class SyncValidationExecutor(BaseValidationExecutor):
99
119
  parallelization of source and target operations.
100
120
  """
101
121
 
122
+ def _schema_side_executor(
123
+ self,
124
+ table_context: TableContext,
125
+ connector: ConnectorBase,
126
+ processor: SchemaResultProcessor,
127
+ ) -> Callable[[str], pd.DataFrame]:
128
+ """Return the runner for one side's schema statements."""
129
+
130
+ def execute(sql: str) -> pd.DataFrame:
131
+ return data_validation_api.execute_query(
132
+ table_context=table_context,
133
+ connector=connector,
134
+ generated_query=GeneratedQuery(query_string=sql),
135
+ result_processor=processor,
136
+ ).dataframe
137
+
138
+ return execute
139
+
102
140
  @report_telemetry(params_list=["source_table_context", "target_table_context"])
103
141
  def execute_schema_validation(
104
142
  self,
@@ -121,11 +159,13 @@ class SyncValidationExecutor(BaseValidationExecutor):
121
159
 
122
160
  """
123
161
  try:
124
- source_query = data_validation_api.generate_schema_query(source_table_context)
125
- target_query = data_validation_api.generate_schema_query(target_table_context)
162
+ source_queries = data_validation_api.generate_schema_queries(source_table_context)
163
+ target_queries = data_validation_api.generate_schema_queries(target_table_context)
164
+ source_generator = QueryGeneratorFactory.create(source_table_context.platform)
165
+ target_generator = QueryGeneratorFactory.create(target_table_context.platform)
126
166
 
127
167
  self.source_extractor.prepare_for_table(source_table_context)
128
- source_processor = self.source_extractor.process_schema_query_result
168
+ source_processor = _ignoring_case_flag(self.source_extractor.process_schema_query_result)
129
169
 
130
170
  # SNOW-3981941: Teradata view L1 now hits DBC.ColumnsQV. If that
131
171
  # catalog query fails for any reason (9719, access, wrapped/masked
@@ -136,12 +176,17 @@ class SyncValidationExecutor(BaseValidationExecutor):
136
176
  is_teradata_view = source_table_context.object_type == ObjectType.VIEW and self.context.source_platform == Platform.TERADATA
137
177
 
138
178
  try:
139
- source_result = data_validation_api.execute_query(
140
- table_context=source_table_context,
141
- connector=self.source_extractor.connector,
142
- generated_query=source_query,
143
- result_processor=source_processor,
179
+ source_df = data_validation_api.fetch_schema_metadata(
180
+ source_queries,
181
+ self._schema_side_executor(
182
+ source_table_context,
183
+ self.source_extractor.connector,
184
+ source_processor,
185
+ ),
186
+ source_generator,
187
+ source_table_context,
144
188
  )
189
+ source_result = QueryExecutionResult(dataframe=source_df)
145
190
  except Exception as exc:
146
191
  if not is_teradata_view:
147
192
  raise
@@ -176,12 +221,17 @@ class SyncValidationExecutor(BaseValidationExecutor):
176
221
  object_name=source_table_context.fully_qualified_name,
177
222
  )
178
223
 
179
- target_result = data_validation_api.execute_query(
180
- table_context=target_table_context,
181
- connector=self.target_extractor.connector,
182
- generated_query=target_query,
183
- result_processor=self.target_extractor.process_schema_query_result,
224
+ target_df = data_validation_api.fetch_schema_metadata(
225
+ target_queries,
226
+ self._schema_side_executor(
227
+ target_table_context,
228
+ self.target_extractor.connector,
229
+ _ignoring_case_flag(self.target_extractor.process_schema_query_result),
230
+ ),
231
+ target_generator,
232
+ target_table_context,
184
233
  )
234
+ target_result = QueryExecutionResult(dataframe=target_df)
185
235
 
186
236
  # SNOW-3981941: Teradata views used to be forced through
187
237
  # ``normalize_table_metadata`` + ``basic_validation=True``, stripping
@@ -308,8 +358,7 @@ class SyncValidationExecutor(BaseValidationExecutor):
308
358
  if not source_queries or not target_queries:
309
359
  raise RuntimeError(f"generate_batched_metrics_queries returned no queries for {source_table_context.fully_qualified_name}")
310
360
 
311
- def source_processor(result, _):
312
- return self.source_extractor.process_metrics_query_result(result)
361
+ source_processor = _ignoring_case_flag(self.source_extractor.process_metrics_query_result)
313
362
 
314
363
  source_dfs: list[pd.DataFrame] = []
315
364
  for source_batch in source_queries:
@@ -322,8 +371,7 @@ class SyncValidationExecutor(BaseValidationExecutor):
322
371
  source_dfs.append(reshape_wide_metrics_result(batch_result.dataframe, source_batch.result_shape))
323
372
  source_result = QueryExecutionResult(dataframe=pd.concat(source_dfs, ignore_index=True))
324
373
 
325
- def target_processor(result, _):
326
- return self.target_extractor.process_metrics_query_result(result)
374
+ target_processor = _ignoring_case_flag(self.target_extractor.process_metrics_query_result)
327
375
 
328
376
  target_dfs: list[pd.DataFrame] = []
329
377
  for target_batch in target_queries: