snowflake-data-validation 1.44.0__tar.gz → 1.45.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (693) hide show
  1. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/PKG-INFO +42 -2
  2. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/README.md +40 -0
  3. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/pyproject.toml +1 -1
  4. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +10 -6
  5. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +5 -1
  6. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +17 -2
  7. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +7 -2
  8. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +3 -0
  9. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +38 -0
  10. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +6 -0
  11. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +2 -0
  12. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +3 -0
  13. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +6 -4
  14. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +3 -1
  15. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +40 -2
  16. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +8 -0
  17. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +1 -0
  18. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +2 -1
  19. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +3 -2
  20. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/_internal.py +5 -15
  21. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +8 -0
  22. snowflake_data_validation-1.45.0/src/snowflake/snowflake_data_validation/query/decimal_text_normalization.py +130 -0
  23. snowflake_data_validation-1.45.0/src/snowflake/snowflake_data_validation/query/float_aggregate_reduction.py +57 -0
  24. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +53 -23
  25. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +38 -1
  26. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/sql_type_families.py +12 -0
  27. snowflake_data_validation-1.45.0/src/snowflake/snowflake_data_validation/query/time_precision_resolution.py +127 -0
  28. snowflake_data_validation-1.45.0/src/snowflake/snowflake_data_validation/query/tsql_float_remainder.py +109 -0
  29. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +5 -8
  30. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +6 -5
  31. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +10 -5
  32. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +7 -0
  33. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +6 -6
  34. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +3 -26
  35. snowflake_data_validation-1.45.0/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/_wkt_despace.sql.j2 +5 -0
  36. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +20 -18
  37. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +2 -0
  38. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +100 -24
  39. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +10 -6
  40. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +11 -4
  41. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +27 -2
  42. snowflake_data_validation-1.45.0/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_tz_normalization.py +73 -0
  43. snowflake_data_validation-1.45.0/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_uniqueidentifier_normalization.py +32 -0
  44. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +24 -18
  45. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +10 -5
  46. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +16 -6
  47. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +54 -0
  48. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/constants.py +8 -0
  49. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +48 -53
  50. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +22 -1
  51. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +110 -71
  52. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +44 -0
  53. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +9 -0
  54. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +35 -2
  55. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +33 -8
  56. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +24 -0
  57. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +106 -17
  58. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -30
  59. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +35 -6
  60. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +22 -16
  61. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Postgresql/test_postgresql_collation.py +1 -0
  62. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/test_redshift_collation.py +2 -1
  63. snowflake_data_validation-1.45.0/tests/unit/Redshift/test_redshift_columns_metadata_template.py +61 -0
  64. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/test_redshift_super_normalization.py +7 -3
  65. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +11 -8
  66. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_query_generator_teradata.py +52 -0
  67. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_teradata_collation.py +1 -0
  68. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +4 -1
  69. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/test_azure_synapse_l3_convert_normalization.py +2 -0
  70. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +116 -2
  71. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/bigquery/test_query_generator_bigquery.py +1 -0
  72. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/db2/test_db2_query_generator.py +3 -3
  73. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/db2/test_db2_xml_long_metrics.py +1 -0
  74. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_query_generator.py +1 -0
  75. snowflake_data_validation-1.45.0/tests/unit/query/test_time_fraction_rendering.py +310 -0
  76. snowflake_data_validation-1.45.0/tests/unit/sqlserver/test_sqlserver_datetimeoffset_full_ingest_utc.py +194 -0
  77. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_l3_convert_normalization.py +3 -0
  78. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_row_queries.py +160 -2
  79. snowflake_data_validation-1.45.0/tests/unit/sqlserver/test_sqlserver_uniqueidentifier_l3_normalization.py +153 -0
  80. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_accepted_transformation.py +35 -0
  81. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_column_normalization_override.py +49 -1
  82. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_configuration_loader.py +11 -0
  83. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_configuration_model.py +10 -0
  84. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_data_validator.py +221 -4
  85. snowflake_data_validation-1.45.0/tests/unit/test_decimal_text_canonical.py +198 -0
  86. snowflake_data_validation-1.45.0/tests/unit/test_float_aggregate_reduction.py +358 -0
  87. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_float_bit_canonical.py +1 -23
  88. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_float_canonical_templates.py +2 -2
  89. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_helper_polars_cast.py +3 -5
  90. snowflake_data_validation-1.45.0/tests/unit/test_helper_polars_cast_threading.py +112 -0
  91. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_iceberg_dv_l3_normalization.py +379 -107
  92. snowflake_data_validation-1.45.0/tests/unit/test_l2_count_distinct_opt_in_config.py +89 -0
  93. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_object_type_criterion.py +2 -2
  94. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_query_generator_numeric_scale.py +10 -1
  95. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_result_set_validator.py +59 -0
  96. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_source_validation_executor.py +2 -0
  97. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_spatial_wkt_canonicalization.py +64 -3
  98. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_sql_literal_jinja_filter.py +2 -0
  99. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_sync_validation_executor.py +35 -0
  100. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_table_configuration.py +6 -0
  101. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_teradata_iso_normalization.py +50 -0
  102. snowflake_data_validation-1.45.0/tests/unit/test_tsql_float_l2_aggregates.py +278 -0
  103. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_validation_configuration.py +4 -0
  104. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_view_configuration.py +6 -0
  105. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_tz_normalization.py +0 -32
  106. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/.gitignore +0 -0
  107. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/LICENSE +0 -0
  108. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/docs/README.md +0 -0
  109. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
  110. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
  111. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
  112. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
  113. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
  114. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
  115. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
  116. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
  117. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
  118. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
  119. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
  120. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
  121. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
  122. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
  123. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
  124. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
  125. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
  126. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
  127. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
  128. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
  129. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
  130. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +0 -0
  131. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +0 -0
  132. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +0 -0
  133. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
  134. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +0 -0
  135. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
  136. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
  137. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
  138. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
  139. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
  140. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
  141. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
  142. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
  143. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
  144. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
  145. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
  146. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
  147. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
  148. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
  149. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
  150. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/db2_lob_normalization.py +0 -0
  151. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
  152. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
  153. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
  154. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +0 -0
  155. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +0 -0
  156. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
  157. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
  158. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
  159. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
  160. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
  161. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
  162. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
  163. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
  164. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
  165. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
  166. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
  167. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
  168. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
  169. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
  170. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +0 -0
  171. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
  172. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
  173. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
  174. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
  175. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
  176. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +0 -0
  177. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
  178. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
  179. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
  180. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
  181. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +0 -0
  182. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
  183. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
  184. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/oracle_statement_functions.py +0 -0
  185. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
  186. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/oracle_xmltype.py +0 -0
  187. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
  188. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +0 -0
  189. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
  190. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
  191. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
  192. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
  193. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
  194. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
  195. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
  196. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
  197. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
  198. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
  199. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
  200. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
  201. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
  202. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
  203. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
  204. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
  205. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  206. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
  207. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
  208. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
  209. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
  210. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
  211. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
  212. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
  213. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
  214. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
  215. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
  216. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
  217. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
  218. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
  219. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
  220. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
  221. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
  222. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
  223. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
  224. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
  225. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
  226. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
  227. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
  228. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
  229. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
  230. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
  231. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
  232. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
  233. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
  234. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
  235. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
  236. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
  237. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
  238. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
  239. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
  240. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
  241. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
  242. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
  243. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
  244. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
  245. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
  246. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
  247. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
  248. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
  249. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
  250. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
  251. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
  252. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
  253. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
  254. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
  255. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
  256. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
  257. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
  258. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
  259. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
  260. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
  261. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
  262. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
  263. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
  264. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
  265. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
  266. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
  267. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
  268. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
  269. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
  270. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
  271. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
  272. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
  273. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
  274. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
  275. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
  276. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +0 -0
  277. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
  278. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
  279. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
  280. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
  281. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
  282. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
  283. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
  284. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
  285. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  286. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
  287. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
  288. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
  289. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
  290. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
  291. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
  292. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -0
  293. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
  294. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
  295. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
  296. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
  297. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
  298. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
  299. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
  300. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
  301. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
  302. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
  303. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
  304. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
  305. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
  306. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
  307. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
  308. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
  309. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
  310. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
  311. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
  312. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
  313. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
  314. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
  315. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
  316. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +0 -0
  317. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
  318. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
  319. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
  320. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
  321. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
  322. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
  323. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
  324. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
  325. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +0 -0
  326. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
  327. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
  328. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
  329. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
  330. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
  331. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
  332. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
  333. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
  334. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
  335. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
  336. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
  337. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
  338. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
  339. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
  340. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
  341. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
  342. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
  343. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
  344. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
  345. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
  346. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
  347. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
  348. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
  349. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
  350. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
  351. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -0
  352. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
  353. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
  354. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
  355. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
  356. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
  357. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
  358. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
  359. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
  360. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
  361. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
  362. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
  363. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
  364. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
  365. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
  366. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
  367. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
  368. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
  369. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
  370. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
  371. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
  372. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
  373. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
  374. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
  375. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
  376. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
  377. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
  378. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
  379. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
  380. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
  381. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
  382. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
  383. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_string_length_normalization.py +0 -0
  384. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
  385. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
  386. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
  387. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
  388. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
  389. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
  390. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
  391. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
  392. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
  393. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
  394. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
  395. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
  396. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
  397. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
  398. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
  399. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +0 -0
  400. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
  401. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
  402. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
  403. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
  404. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
  405. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
  406. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
  407. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
  408. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
  409. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
  410. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
  411. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
  412. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
  413. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
  414. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
  415. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
  416. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
  417. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
  418. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
  419. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
  420. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
  421. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
  422. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
  423. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/dv_tracing.py +0 -0
  424. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/error_classifier.py +0 -0
  425. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
  426. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
  427. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
  428. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
  429. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
  430. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
  431. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
  432. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
  433. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/lob_source_types.py +0 -0
  434. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
  435. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
  436. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +0 -0
  437. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
  438. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
  439. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/model/column_selection.py +0 -0
  440. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
  441. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
  442. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/period_common.py +0 -0
  443. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
  444. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +0 -0
  445. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
  446. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/row_validation_lob_exclusion.py +0 -0
  447. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
  448. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
  449. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
  450. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
  451. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
  452. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
  453. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +0 -0
  454. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
  455. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
  456. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
  457. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
  458. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
  459. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
  460. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
  461. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/object_type_criterion.py +0 -0
  462. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
  463. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
  464. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
  465. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
  466. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
  467. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
  468. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
  469. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
  470. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
  471. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
  472. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
  473. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
  474. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
  475. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
  476. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
  477. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
  478. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
  479. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
  480. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
  481. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
  482. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
  483. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/.coveragerc +0 -0
  484. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/conftest.py +0 -0
  485. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/integration/.coveragerc +0 -0
  486. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
  487. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/integration/test_async_generation_integration.py +0 -0
  488. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/integration/test_async_validation_integration.py +0 -0
  489. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/integration/test_reference_integration.py +0 -0
  490. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/integration/test_source_validation_integration.py +0 -0
  491. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/integration/test_sync_validation_integration.py +0 -0
  492. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Postgresql/test_postgresql_bit_count_distinct.py +0 -0
  493. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Postgresql/test_postgresql_json_cell_validation.py +0 -0
  494. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Postgresql/test_postgresql_jsonb_row_hash.py +0 -0
  495. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
  496. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
  497. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
  498. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
  499. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
  500. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/test_connector_redshift.py +0 -0
  501. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
  502. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
  503. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
  504. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Redshift/test_redshift_timetz_sentinel_normalization.py +0 -0
  505. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_connector_teradata.py +0 -0
  506. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
  507. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_period_varchar_l1.py +0 -0
  508. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
  509. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
  510. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
  511. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/__init__.py +0 -0
  512. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
  513. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
  514. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
  515. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
  516. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
  517. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
  518. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
  519. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
  520. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
  521. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
  522. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
  523. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
  524. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
  525. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
  526. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
  527. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/__init__.py +0 -0
  528. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
  529. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
  530. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
  531. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
  532. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
  533. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
  534. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/bigquery/__init__.py +0 -0
  535. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/bigquery/test_bigquery_l1_string_length.py +0 -0
  536. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
  537. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
  538. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/conftest.py +0 -0
  539. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/db2/__init__.py +0 -0
  540. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/db2/test_db2_lob_dv_generation.py +0 -0
  541. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
  542. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/db2/test_db2_registration.py +0 -0
  543. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/db2/test_db2_xml_long_dv_generation.py +0 -0
  544. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/oracle/__init__.py +0 -0
  545. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -0
  546. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_configured_index_columns.py +0 -0
  547. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
  548. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
  549. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
  550. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
  551. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
  552. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
  553. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
  554. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_quoted_identifiers.py +0 -0
  555. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
  556. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
  557. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
  558. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlite/__init__.py +0 -0
  559. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
  560. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
  561. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
  562. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +0 -0
  563. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
  564. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
  565. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/__init__.py +0 -0
  566. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
  567. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
  568. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_metrics_utc.py +0 -0
  569. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_json.py +0 -0
  570. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -0
  571. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_length_metrics_chars.py +0 -0
  572. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
  573. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
  574. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
  575. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_string_length_pairing.py +0 -0
  576. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_sqlserver_xml_image_metrics.py +0 -0
  577. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/sqlserver/test_tsql_integer_stddev_exact.py +0 -0
  578. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_arguments_manager_base.py +0 -0
  579. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_arguments_manager_factory.py +0 -0
  580. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_batched_metrics_queries.py +0 -0
  581. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
  582. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_catalog_column_size.py +0 -0
  583. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_catalog_queries_take_actual_names.py +0 -0
  584. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_cell_data_validator.py +0 -0
  585. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_cell_data_validator_threading.py +0 -0
  586. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_cell_validation_query_generation.py +0 -0
  587. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_charset_normalization.py +0 -0
  588. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_column_grouping.py +0 -0
  589. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_column_metadata.py +0 -0
  590. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_column_partitioning_strategy.py +0 -0
  591. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_column_selection.py +0 -0
  592. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_column_selection_actual_names.py +0 -0
  593. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_comparison_codec.py +0 -0
  594. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_comparison_orchestrator.py +0 -0
  595. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_configuration_file_editor.py +0 -0
  596. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_configuration_file_generator.py +0 -0
  597. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_configuration_file_synchronizer.py +0 -0
  598. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_connection_pool.py +0 -0
  599. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_connector_failure_tracker.py +0 -0
  600. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_connector_snowflake.py +0 -0
  601. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_cpu_optimizer.py +0 -0
  602. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_custom_templates_models.py +0 -0
  603. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_dv_tracing.py +0 -0
  604. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_error_classifier.py +0 -0
  605. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_escape_odbc_value.py +0 -0
  606. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_executor_factory.py +0 -0
  607. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_get_configuration_file.py +0 -0
  608. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_get_target_cols.py +0 -0
  609. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_helper_dataframe.py +0 -0
  610. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_helper_io.py +0 -0
  611. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_helpers.py +0 -0
  612. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_html_report_builder.py +0 -0
  613. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_iceberg_v2_metrics_exclusion.py +0 -0
  614. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_index_key_format.py +0 -0
  615. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_internal_helpers.py +0 -0
  616. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_interval_common.py +0 -0
  617. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_iso_dv_common.py +0 -0
  618. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_l2_collation_metadata.py +0 -0
  619. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_logging_config.py +0 -0
  620. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_metric_identifier_rendering.py +0 -0
  621. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_metrics_reshape.py +0 -0
  622. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_metrics_result_shape.py +0 -0
  623. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_metrics_templates_casts.py +0 -0
  624. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_metrics_tolerance.py +0 -0
  625. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_normalize_shape_aware.py +0 -0
  626. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_numeric_scale_resolution.py +0 -0
  627. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_parallel_execution_engine_fatal_errors.py +0 -0
  628. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_period_common.py +0 -0
  629. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_platform_bridge.py +0 -0
  630. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_postgresql_normalization_templates.py +0 -0
  631. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_postgresql_tz_normalization.py +0 -0
  632. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_pushdown_diff_sql.py +0 -0
  633. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_query_cell_level_validation.py +0 -0
  634. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_query_executor.py +0 -0
  635. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_query_metrics_level_validation.py +0 -0
  636. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_query_to_dataframe.py +0 -0
  637. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_query_validator.py +0 -0
  638. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_qvci_fallback.py +0 -0
  639. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
  640. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_qvci_fallback_triggers.py +0 -0
  641. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_redshift_native_timestamptz_ltz.py +0 -0
  642. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_report_metadata.py +0 -0
  643. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_result_set_cell_level_validation.py +0 -0
  644. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
  645. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_result_set_snapshot_generation.py +0 -0
  646. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_result_set_snapshot_validation.py +0 -0
  647. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_result_set_to_dataframe.py +0 -0
  648. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_row_count_bigint_overflow.py +0 -0
  649. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_row_data_validator.py +0 -0
  650. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_row_data_validator_empty_chunk.py +0 -0
  651. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_row_hash_column_delimiter.py +0 -0
  652. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_row_partitioning_strategy.py +0 -0
  653. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_row_validation_lob_exclusion.py +0 -0
  654. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_row_validation_report_buffer.py +0 -0
  655. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_schema_column_selection.py +0 -0
  656. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_shutdown_coordinator.py +0 -0
  657. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_signature_external_table.py +0 -0
  658. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_signature_row_md5_query.py +0 -0
  659. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_snapshot_validation_statements.py +0 -0
  660. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_snowflake_arguments_manager.py +0 -0
  661. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
  662. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_snowflake_redshift_super_size_guard.py +0 -0
  663. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_sql_catalog_template_guard.py +0 -0
  664. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_sqlite_validation_connection.py +0 -0
  665. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
  666. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
  667. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_sync_executor_qvci_fallback.py +0 -0
  668. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_table_column_metadata_model.py +0 -0
  669. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_table_context.py +0 -0
  670. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_table_metadata_processor.py +0 -0
  671. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_table_snapshot_generation.py +0 -0
  672. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_table_snapshot_validation.py +0 -0
  673. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_target_platform_factory.py +0 -0
  674. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_telemetry.py +0 -0
  675. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_templates_loader_manager.py +0 -0
  676. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_teradata_string_rtrim_policy.py +0 -0
  677. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_teradata_timetz_metric_domain.py +0 -0
  678. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_teradata_type_code_mapping.py +0 -0
  679. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_timestamp_golden_vectors.py +0 -0
  680. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_trace_bridge.py +0 -0
  681. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_validation_database_connection.py +0 -0
  682. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_validation_execution_context.py +0 -0
  683. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_validation_progress_reporter.py +0 -0
  684. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_validation_report_buffer.py +0 -0
  685. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_validation_report_status.py +0 -0
  686. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_validation_templates_dto.py +0 -0
  687. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_vector_bit_normalization.py +0 -0
  688. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_vector_common.py +0 -0
  689. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_vector_normalization.py +0 -0
  690. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/test_warm_start.py +0 -0
  691. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/utils/__init__.py +0 -0
  692. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/utils/test_constants.py +0 -0
  693. {snowflake_data_validation-1.44.0 → snowflake_data_validation-1.45.0}/tests/unit/utils/test_semi_structured_json_canonicalization.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: snowflake-data-validation
3
- Version: 1.44.0
3
+ Version: 1.45.0
4
4
  Summary: Snowflake Data Validation
5
5
  Project-URL: Bug Tracker, https://github.com/snowflake-eng/migrations-data-validation/issues
6
6
  Project-URL: Source code, https://github.com/snowflake-eng/migrations-data-validation/
@@ -79,7 +79,7 @@ Requires-Dist: psycopg[binary]>=3.2.0; extra == 'postgresql'
79
79
  Provides-Extra: redshift
80
80
  Requires-Dist: redshift-connector>=2.1.14; extra == 'redshift'
81
81
  Provides-Extra: scai
82
- Requires-Dist: snowflake-code-unit-registry>=0.9.0; extra == 'scai'
82
+ Requires-Dist: snowflake-code-unit-registry>=0.9.2; extra == 'scai'
83
83
  Provides-Extra: sqlite
84
84
  Requires-Dist: sqlean-py>=3.45.0; extra == 'sqlite'
85
85
  Provides-Extra: sqlserver
@@ -214,6 +214,46 @@ For configuration options and examples, see the [official documentation](https:/
214
214
 
215
215
  ## Changelog
216
216
 
217
+ ### v1.45.0
218
+
219
+ **New features**
220
+
221
+ - Added support for applying custom L3 normalization per side, including `targetDataType: "*"` to target the mapped type.
222
+ - Added the `includeCountDistinct` option; L2 `COUNT(DISTINCT)` is now off by default and opt-in globally or per table.
223
+ - 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.
224
+
225
+ **Improvements**
226
+
227
+ - Improved row comparison with positional column identity, so duplicate and case-variant column names no longer collapse.
228
+ - Improved Redshift connection resiliency with TCP keepalive defaults.
229
+ - Improved L1 validation to treat native integer bits-versus-digits precision differences as compatible, reported as a warning.
230
+
231
+ **Bug fixes**
232
+
233
+ - Fixed Oracle L2 metric rows and L3 cell frames upper-casing column names, which made mixed-case columns collide.
234
+ - Fixed L3 failing rows over a lowercase SQL Server `UNIQUEIDENTIFIER` or an ignored `FLOAT` `targetExpression`.
235
+ - Fixed a possible deadlock in expression casts when validators run on several threads.
236
+ - Fixed Redshift and PostgreSQL `REAL` values being compared against a non-exact widened value.
237
+ - Fixed Iceberg `FULL_INGEST` validation to follow the lossless-only temporal promotion of the load.
238
+
239
+ ### v1.44.1
240
+
241
+ **New features**
242
+
243
+ - Added support for L3 row and hybrid validation on Iceberg v3 tables in native storage mode, keyed by the stored column type.
244
+
245
+ **Bug fixes**
246
+
247
+ - Fixed `PERIOD` validation normalization and signature extraction.
248
+ - Fixed Teradata `XML` columns not being cast to `UNICODE` before L3 hashing.
249
+ - Fixed SQL Server and Synapse `FLOAT`/`REAL` L2 aggregates being cast to `DECIMAL(38,10)` on the source only.
250
+ - Fixed `TIME` and `TIME WITH TIME ZONE` normalization dropping fractional seconds on several platforms.
251
+ - Fixed `DECFLOAT` L3 comparisons diverging past about 16 digits by comparing exact decimal text.
252
+ - Fixed Teradata float aggregate comparisons by comparing on the signed significand.
253
+ - Fixed false row-hash mismatches on Iceberg-compatible geospatial columns.
254
+ - Fixed offset timestamps (SQL Server `DATETIMEOFFSET`, Teradata `TIMESTAMP WITH TIME ZONE`) not being compared as UTC instants under Iceberg `FULL_INGEST`.
255
+ - Fixed Redshift Iceberg validation findings: L3 `TIME`, L2 `count_distinct` overflow, and the L1 precision message.
256
+
217
257
  ### v1.44.0
218
258
 
219
259
  **New features**
@@ -123,6 +123,46 @@ For configuration options and examples, see the [official documentation](https:/
123
123
 
124
124
  ## Changelog
125
125
 
126
+ ### v1.45.0
127
+
128
+ **New features**
129
+
130
+ - Added support for applying custom L3 normalization per side, including `targetDataType: "*"` to target the mapped type.
131
+ - Added the `includeCountDistinct` option; L2 `COUNT(DISTINCT)` is now off by default and opt-in globally or per table.
132
+ - 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.
133
+
134
+ **Improvements**
135
+
136
+ - Improved row comparison with positional column identity, so duplicate and case-variant column names no longer collapse.
137
+ - Improved Redshift connection resiliency with TCP keepalive defaults.
138
+ - Improved L1 validation to treat native integer bits-versus-digits precision differences as compatible, reported as a warning.
139
+
140
+ **Bug fixes**
141
+
142
+ - Fixed Oracle L2 metric rows and L3 cell frames upper-casing column names, which made mixed-case columns collide.
143
+ - Fixed L3 failing rows over a lowercase SQL Server `UNIQUEIDENTIFIER` or an ignored `FLOAT` `targetExpression`.
144
+ - Fixed a possible deadlock in expression casts when validators run on several threads.
145
+ - Fixed Redshift and PostgreSQL `REAL` values being compared against a non-exact widened value.
146
+ - Fixed Iceberg `FULL_INGEST` validation to follow the lossless-only temporal promotion of the load.
147
+
148
+ ### v1.44.1
149
+
150
+ **New features**
151
+
152
+ - Added support for L3 row and hybrid validation on Iceberg v3 tables in native storage mode, keyed by the stored column type.
153
+
154
+ **Bug fixes**
155
+
156
+ - Fixed `PERIOD` validation normalization and signature extraction.
157
+ - Fixed Teradata `XML` columns not being cast to `UNICODE` before L3 hashing.
158
+ - Fixed SQL Server and Synapse `FLOAT`/`REAL` L2 aggregates being cast to `DECIMAL(38,10)` on the source only.
159
+ - Fixed `TIME` and `TIME WITH TIME ZONE` normalization dropping fractional seconds on several platforms.
160
+ - Fixed `DECFLOAT` L3 comparisons diverging past about 16 digits by comparing exact decimal text.
161
+ - Fixed Teradata float aggregate comparisons by comparing on the signed significand.
162
+ - Fixed false row-hash mismatches on Iceberg-compatible geospatial columns.
163
+ - Fixed offset timestamps (SQL Server `DATETIMEOFFSET`, Teradata `TIMESTAMP WITH TIME ZONE`) not being compared as UTC instants under Iceberg `FULL_INGEST`.
164
+ - Fixed Redshift Iceberg validation findings: L3 `TIME`, L2 `count_distinct` overflow, and the L1 precision message.
165
+
126
166
  ### v1.44.0
127
167
 
128
168
  **New features**
@@ -105,7 +105,7 @@ db2 = [
105
105
  # musllinux build, and SDV is published to public PyPI. Inside DMO/DEA the
106
106
  # dependency is already declared, so SDV's logger tree is covered there.
107
107
  scai = [
108
- "snowflake-code-unit-registry>=0.9.0",
108
+ "snowflake-code-unit-registry>=0.9.2",
109
109
  ]
110
110
 
111
111
  [project.urls]
@@ -258,6 +258,9 @@ SMALLMONEY:
258
258
  metric_return_datatype: FLOAT
259
259
  metric_column_modifier: "% 2097143"
260
260
 
261
+ # avg/sum/stddev aggregate the binary64 value, as Snowflake aggregates its FLOAT
262
+ # (SNOW-4314808); REAL widens exactly. T-SQL has no FLOAT %, so the generator
263
+ # renders {{ modifier }} on this operand as Snowflake's float remainder (tsql_float_remainder.py).
261
264
  FLOAT:
262
265
  min:
263
266
  metric_query: MIN("{{ col_name }}")
@@ -275,18 +278,19 @@ FLOAT:
275
278
  metric_query: SUM(CASE WHEN "{{ col_name }}" = 0 THEN 1 ELSE 0 END)
276
279
  metric_return_datatype: INT
277
280
  avg:
278
- metric_query: AVG(CAST("{{ col_name }}" AS DECIMAL(38, 10)) {{ modifier }})
281
+ metric_query: AVG(CAST("{{ col_name }}" AS FLOAT) {{ modifier }})
279
282
  metric_return_datatype: FLOAT
280
283
  metric_column_modifier: "% 2097143"
281
284
  sum:
282
- metric_query: SUM(CAST("{{ col_name }}" AS DECIMAL(38, 10)) {{ modifier }})
285
+ metric_query: SUM(CAST("{{ col_name }}" AS FLOAT) {{ modifier }})
283
286
  metric_return_datatype: FLOAT
284
287
  metric_column_modifier: "% 2097143"
285
288
  stddev:
286
- metric_query: STDEVP(CAST("{{ col_name }}" AS DECIMAL(38, 10)) {{ modifier }})
289
+ metric_query: STDEVP(CAST("{{ col_name }}" AS FLOAT) {{ modifier }})
287
290
  metric_return_datatype: FLOAT
288
291
  metric_column_modifier: "% 2097143"
289
292
 
293
+ # avg/sum/stddev widen to binary64, as FLOAT's do (SNOW-4314808).
290
294
  REAL:
291
295
  min:
292
296
  metric_query: MIN("{{ col_name }}")
@@ -304,15 +308,15 @@ REAL:
304
308
  metric_query: SUM(CASE WHEN "{{ col_name }}" = 0 THEN 1 ELSE 0 END)
305
309
  metric_return_datatype: INT
306
310
  avg:
307
- metric_query: AVG(CAST("{{ col_name }}" AS DECIMAL(38, 10)) {{ modifier }})
311
+ metric_query: AVG(CAST("{{ col_name }}" AS FLOAT) {{ modifier }})
308
312
  metric_return_datatype: FLOAT
309
313
  metric_column_modifier: "% 2097143"
310
314
  sum:
311
- metric_query: SUM(CAST("{{ col_name }}" AS DECIMAL(38, 10)) {{ modifier }})
315
+ metric_query: SUM(CAST("{{ col_name }}" AS FLOAT) {{ modifier }})
312
316
  metric_return_datatype: REAL
313
317
  metric_column_modifier: "% 2097143"
314
318
  stddev:
315
- metric_query: STDEVP(CAST("{{ col_name }}" AS DECIMAL(38, 10)) {{ modifier }})
319
+ metric_query: STDEVP(CAST("{{ col_name }}" AS FLOAT) {{ modifier }})
316
320
  metric_return_datatype: FLOAT
317
321
  metric_column_modifier: "% 2097143"
318
322
 
@@ -50,7 +50,11 @@ NVARCHAR: '"{{ col_name }}"'
50
50
  # Use '+' (not CONCAT) so a NULL input propagates to NULL.
51
51
  # DATENAME(TZOFFSET) emits '+HH:MM'/'-HH:MM' for every offset, including UTC.
52
52
  DATE: CONVERT(VARCHAR(10), "{{ col_name }}", 23)
53
- TIME: CONVERT(VARCHAR(8), "{{ col_name }}", 108)
53
+ # Same text as SQL Server TIME: hh:mi:ss.fffffff + '00', cut to {{ time_text_length }}.
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'
54
58
  DATETIME: STUFF(CONVERT(VARCHAR(27), CAST(CAST("{{ col_name }}" AS DATETIME2(3)) AS DATETIME2(7)), 121), 11, 1, 'T') + '00'
55
59
  DATETIME2: LEFT(STUFF(CONVERT(VARCHAR(27), CAST("{{ col_name }}" AS DATETIME2(7)), 121), 11, 1, 'T'), 26) + '000'
56
60
  SMALLDATETIME: CONVERT(VARCHAR(19), "{{ col_name }}", 126) + '.000000000'
@@ -44,12 +44,19 @@ from snowflake.snowflake_data_validation.query.query_generator_base import (
44
44
  QueryGeneratorBase,
45
45
  resolve_table_context_modifiers,
46
46
  )
47
+ from snowflake.snowflake_data_validation.query.tsql_float_remainder import (
48
+ TsqlFloatMetricModifierMixin,
49
+ )
47
50
  from snowflake.snowflake_data_validation.sqlserver.query.charset_normalization import (
48
51
  SqlServerCharacterSetResolver,
49
52
  )
50
53
  from snowflake.snowflake_data_validation.utils.constants import (
51
54
  Platform,
52
55
  )
56
+ from snowflake.snowflake_data_validation.utils.iceberg_dv_common import (
57
+ resolve_iceberg_compatible_tsql_source_normalization_key,
58
+ )
59
+ from snowflake.snowflake_data_validation.utils.iso_dv_common import get_paired_target_column_types
53
60
  from snowflake.snowflake_data_validation.utils.measure_collation import (
54
61
  TSQL_ROW_HASH_COLLATION_SUFFIX,
55
62
  tsql_comparison_collation_tokens,
@@ -72,7 +79,7 @@ def build_azure_synapse_float_bit_canonical_expr(col_ref: str) -> str:
72
79
  return build_binary64_canonical_expr(col_ref, dialect=Platform.AZURE_SYNAPSE.value)
73
80
 
74
81
 
75
- class QueryGeneratorAzureSynapse(QueryGeneratorBase):
82
+ class QueryGeneratorAzureSynapse(TsqlFloatMetricModifierMixin, QueryGeneratorBase):
76
83
  """Azure Synapse Analytics implementation of the query generator.
77
84
 
78
85
  Uses T-SQL syntax shared with SQL Server. L3 row hashing is emitted as a
@@ -138,8 +145,16 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
138
145
  datatypes_normalization_templates = table_context.templates_loader_manager.datatypes_normalization_templates
139
146
  rendered: dict[str, str] = {}
140
147
  renderer_columns = self._row_md5_normalization_columns(table_context)
148
+ paired_target_types = get_paired_target_column_types(table_context)
149
+ iceberg_spec = table_context.iceberg_spec
150
+ storage_mode = table_context.storage_mode
141
151
  for column in renderer_columns:
142
- 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
+ iceberg_spec=iceberg_spec,
156
+ storage_mode=storage_mode,
157
+ )
143
158
  normalization_template = self._lookup_normalization_template(
144
159
  datatypes_normalization_templates,
145
160
  lookup_key,
@@ -47,11 +47,15 @@ FLOAT: '{{ float_bit_shim }}'
47
47
  # bounded BIGNUMERIC(p, s) that fits NUMBER hashes identically. A bare
48
48
  # BIGNUMERIC is created as DECFLOAT (SnowConvert engine parity); precision
49
49
  # above 38 or scale above 37 reports as an L1 WARNING rather than a schema
50
- # failure, and L2/L3 are not expected to reach parity on the extreme form.
50
+ # failure.
51
51
  NUMERIC: FORMAT('{{ numeric_format_mask }}', `{{ col_name }}`)
52
52
  DECIMAL: FORMAT('{{ numeric_format_mask }}', `{{ col_name }}`)
53
53
  BIGNUMERIC: FORMAT('{{ numeric_format_mask }}', `{{ col_name }}`)
54
54
  BIGDECIMAL: FORMAT('{{ numeric_format_mask }}', `{{ col_name }}`)
55
+ # A BIGNUMERIC / BIGDECIMAL whose mirror is DECFLOAT (the paired target type, or
56
+ # a bare type when unpaired) emits the exact canonical decimal text Snowflake
57
+ # DECFLOAT does. A value past DECFLOAT's 38 digits then reports as a mismatch.
58
+ BIGNUMERIC_DECFLOAT: '{{ decfloat_shim }}'
55
59
 
56
60
  # Snowflake BOOLEAN normalizes to uppercase 'TRUE'/'FALSE' (see
57
61
  # snowflake_datatypes_normalization_templates.yaml); match it so the row hashes agree.
@@ -65,7 +69,8 @@ BYTES: UPPER(TO_HEX(`{{ col_name }}`))
65
69
 
66
70
  # %E4Y zero-pads the year to 4 digits so year 1 renders "0001" (matches Snowflake YYYY).
67
71
  DATE: FORMAT_DATE('%E4Y-%m-%d', `{{ col_name }}`)
68
- TIME: FORMAT_TIME('%H:%M:%S', `{{ col_name }}`)
72
+ # TIME: microseconds + '000' pad to nine digits, cut to the precision both sides share.
73
+ TIME: LEFT(FORMAT_TIME('%H:%M:%E6S', `{{ col_name }}`) || '000', {{ time_text_length }})
69
74
  DATETIME: FORMAT_DATETIME('%E4Y-%m-%dT%H:%M:%E9S', `{{ col_name }}`)
70
75
  TIMESTAMP: FORMAT_TIMESTAMP('%E4Y-%m-%dT%H:%M:%E9S%Ez', `{{ col_name }}`, 'UTC')
71
76
 
@@ -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,12 @@ from __future__ import annotations
17
17
 
18
18
  import logging
19
19
 
20
+ from shared.datatypes.bigquery import BigQueryType
20
21
  from shared.datatypes.common import CommonType
22
+ from shared.datatypes.snowflake import SnowflakeType
23
+ from snowflake.snowflake_data_validation.query.decimal_text_normalization import (
24
+ build_decimal_text_canonical_expr,
25
+ )
21
26
  from snowflake.snowflake_data_validation.query.float_bit_normalization import (
22
27
  build_binary64_canonical_expr,
23
28
  )
@@ -33,6 +38,10 @@ from snowflake.snowflake_data_validation.utils.constants import (
33
38
  METRIC_COLUMN_MODIFIER_PLACEHOLDER,
34
39
  Platform,
35
40
  )
41
+ from snowflake.snowflake_data_validation.utils.iso_dv_common import (
42
+ get_paired_target_column_types,
43
+ normalize_snowflake_base_type,
44
+ )
36
45
  from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
37
46
  from snowflake.snowflake_data_validation.validation.comparison_codec import (
38
47
  ComparisonCodec,
@@ -43,6 +52,10 @@ from snowflake.snowflake_data_validation.validation.comparison_codec import (
43
52
 
44
53
  LOGGER = logging.getLogger(__name__)
45
54
 
55
+ _WIDE_NUMERIC_BASE_TYPES = frozenset({BigQueryType.BIGNUMERIC, BigQueryType.BIGDECIMAL})
56
+ # Normalization key for a BIGNUMERIC / BIGDECIMAL whose Snowflake mirror is DECFLOAT.
57
+ BIGNUMERIC_DECFLOAT_NORMALIZATION_KEY = "BIGNUMERIC_DECFLOAT"
58
+
46
59
 
47
60
  def build_bigquery_float_bit_canonical_expr(col_ref: str) -> str:
48
61
  """Return the exact binary64 tuple used for BigQuery float validation."""
@@ -151,6 +164,27 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
151
164
  )
152
165
  return build_bigquery_float_bit_canonical_expr(value_expr)
153
166
 
167
+ def build_decfloat_shim(self, column, col_ref: str) -> str:
168
+ """Canonicalize a BIGNUMERIC mirrored as DECFLOAT from its exact ``STRING`` text."""
169
+ return build_decimal_text_canonical_expr(f"CAST({col_ref} AS STRING)", dialect=self.platform.value)
170
+
171
+ def _lands_in_decfloat(self, column, table_context: TableContext) -> bool:
172
+ """Return True when a BIGNUMERIC / BIGDECIMAL column's Snowflake mirror is DECFLOAT.
173
+
174
+ The paired target type decides when it is known: Iceberg and user-chosen
175
+ targets keep a bare BIGNUMERIC on NUMBER. Without it, a bare type follows
176
+ the create path, which emits DECFLOAT (``apply_type_parameters``).
177
+ """
178
+ if self.normalize_bigquery_type(column.data_type) not in _WIDE_NUMERIC_BASE_TYPES:
179
+ return False
180
+ target_type = get_paired_target_column_types(table_context).get(column.name)
181
+ if isinstance(target_type, str):
182
+ return normalize_snowflake_base_type(target_type) == SnowflakeType.DECFLOAT
183
+ if "(" in column.data_type:
184
+ return False
185
+ LOGGER.debug(f"No paired target type for {column.data_type} {column.name}; assuming the DECFLOAT mirror the create path emits.")
186
+ return True
187
+
154
188
  def _apply_metric_column_modifier(
155
189
  self,
156
190
  metric_template: str,
@@ -200,8 +234,11 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
200
234
  self,
201
235
  column,
202
236
  datatypes_normalization_templates: dict[str, str],
237
+ table_context: TableContext,
203
238
  ) -> str:
204
239
  base_type = self.normalize_bigquery_type(column.data_type)
240
+ if self._lands_in_decfloat(column, table_context):
241
+ base_type = BIGNUMERIC_DECFLOAT_NORMALIZATION_KEY
205
242
  normalization_template = datatypes_normalization_templates.get(base_type)
206
243
  if normalization_template is None:
207
244
  LOGGER.debug(
@@ -227,6 +264,7 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
227
264
  normalization_template = self._resolve_datatype_normalization_template(
228
265
  column,
229
266
  datatypes_normalization_templates,
267
+ table_context,
230
268
  )
231
269
  normalization_template = resolve_column_normalization_template(
232
270
  column.name,
@@ -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
 
@@ -15,6 +15,7 @@
15
15
  # - {{ numeric_format_mask }} is a pre-built DB2-valid 9…90 mask (no FM prefix)
16
16
  # from the query generator's _build_fm_to_char_mask override.
17
17
  # - {{ float_bit_shim }} expands to the IEEE-754 sign|exponent|significand tuple.
18
+ # - {{ decfloat_shim }} expands to DECFLOAT's exact canonical decimal text.
18
19
  # - HEX(HASH(val, 0)) computes MD5 in DB2 11.5 (algorithm 0 = MD5) using the built-in
19
20
  # SYSIBM.HASH scalar — no special privilege (unlike SYSPROC.HASH2, which is often absent).
20
21
  # - Double-quoted column names handle lowercase/mixed-case identifiers.
@@ -37,7 +38,8 @@ FLOAT: '{{ float_bit_shim }}'
37
38
  REAL: '{{ float_bit_shim }}'
38
39
  DOUBLE: '{{ float_bit_shim }}'
39
40
  DOUBLE PRECISION: '{{ float_bit_shim }}'
40
- DECFLOAT: '{{ float_bit_shim }}'
41
+ # DECFLOAT(16/34) is decimal: a DOUBLE drops digits past ~16, so compare its exact text.
42
+ DECFLOAT: '{{ decfloat_shim }}'
41
43
 
42
44
  # ---- Character types (text family) ----
43
45
  # CHAR/NCHAR are blank-padded; the Snowflake E2E/SCAI mirror is VARCHAR/TEXT.
@@ -103,9 +105,9 @@ XML: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN OCTET_LENGTH(XMLSERIALIZE
103
105
  # DATE: no fractional seconds in DB2 DATE.
104
106
  DATE: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD')
105
107
  # TIME: no fractional seconds in DB2 TIME. DB2's TO_CHAR / VARCHAR_FORMAT has no
106
- # TIME signature (SQL0245N, ambiguous routine), so CHAR(col, JIS) renders the
107
- # hh:mm:ss form Snowflake's TO_CHAR(col, 'HH24:MI:SS') produces.
108
- TIME: CHAR("{{ col_name }}", JIS)
108
+ # TIME signature (SQL0245N, ambiguous routine), so CHAR(col, JIS) renders hh:mm:ss,
109
+ # padded to nine zero digits and cut like Snowflake's TIME ({{ time_text_length }}).
110
+ TIME: LEFT(CHAR("{{ col_name }}", JIS) || '.000000000', {{ time_text_length }})
109
111
  # TIMESTAMP: ISO 8601 with T-separator and 9 fractional digits, Snowflake
110
112
  # TIMESTAMP_NTZ's .FF9 canonical form. FF9 pads TIMESTAMP(0-8) with zeros and keeps
111
113
  # digits 7-9 of TIMESTAMP(9-12), the most Snowflake stores. DB2's TO_CHAR rejects an
@@ -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
@@ -21,15 +21,22 @@ below give DB2 its own DB2-valid rendering that still matches Snowflake
21
21
  canonical wrapper and uses the base substitution with the DB2 mask.
22
22
  * ``build_float_bit_shim`` — IEEE-754 ``sign|exponent|significand`` tuple (same
23
23
  contract as Snowflake FLOAT). DB2 ``LN``/``POWER`` run in ``DOUBLE``.
24
+ * ``build_decfloat_shim`` — DECFLOAT's exact ``CHAR`` text, canonicalized like
25
+ Snowflake DECFLOAT's ``TO_VARCHAR`` (a ``DOUBLE`` keeps ~16 of its 34 digits).
24
26
  """
25
27
 
26
28
  from pathlib import Path
27
29
 
28
30
  import jinja2
29
31
 
32
+ from shared.datatypes.common import CommonType
33
+ from shared.datatypes.db2 import Db2Type
30
34
  from snowflake.snowflake_data_validation.oracle.query.query_generator_oracle import (
31
35
  QueryGeneratorOracle,
32
36
  )
37
+ from snowflake.snowflake_data_validation.query.decimal_text_normalization import (
38
+ build_decimal_text_canonical_expr,
39
+ )
33
40
  from snowflake.snowflake_data_validation.query.float_bit_normalization import (
34
41
  build_binary64_canonical_expr,
35
42
  )
@@ -40,6 +47,7 @@ from snowflake.snowflake_data_validation.query.query_generator_base import (
40
47
  QueryGeneratorBase,
41
48
  resolve_table_context_modifiers,
42
49
  )
50
+ from snowflake.snowflake_data_validation.query.sql_type_families import SNOWFLAKE_FLOAT_TYPE_NAMES
43
51
  from snowflake.snowflake_data_validation.utils.constants import (
44
52
  NULL_HASHING_SENTINEL,
45
53
  NULL_HASHING_SENTINEL_KEY,
@@ -47,6 +55,11 @@ from snowflake.snowflake_data_validation.utils.constants import (
47
55
  ROW_HASH_COLUMN_DELIMITER_KEY,
48
56
  Platform,
49
57
  )
58
+ from snowflake.snowflake_data_validation.utils.iso_dv_common import (
59
+ get_paired_target_column_types,
60
+ normalize_snowflake_base_type,
61
+ )
62
+ from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
50
63
 
51
64
 
52
65
  # Wide enough for BIGINT (19 digits) and DECIMAL(31); the trailing 0 forces the
@@ -57,8 +70,8 @@ _DB2_INTEGER_NINES = 31
57
70
  def build_db2_float_bit_canonical_expr(col_ref: str) -> str:
58
71
  """Return the exact binary64 tuple used for DB2 float validation.
59
72
 
60
- ``LN``/``POWER`` must run in IEEE-754, so values (including ``DECFLOAT``)
61
- are cast to ``DOUBLE`` first. A value that is already ``DOUBLE`` (including
73
+ ``LN``/``POWER`` must run in IEEE-754, so values are cast to ``DOUBLE``
74
+ first. A value that is already ``DOUBLE`` (including
62
75
  float32-widened ``REAL``) is left unchanged.
63
76
  """
64
77
  ieee_expr = col_ref
@@ -130,6 +143,31 @@ class QueryGeneratorDb2(QueryGeneratorOracle):
130
143
  value_expr = float_bit_input_expr(col_ref, data_type, dialect=self.platform.value)
131
144
  return build_db2_float_bit_canonical_expr(value_expr)
132
145
 
146
+ def build_decfloat_shim(self, column, col_ref: str) -> str:
147
+ """Canonicalize DECFLOAT from its exact ``CHAR`` text (``NaN``/``Infinity`` become markers)."""
148
+ return build_decimal_text_canonical_expr(f"CHAR({col_ref})", dialect=self.platform.value)
149
+
150
+ def _resolve_datatype_normalization_template(
151
+ self,
152
+ column,
153
+ datatypes_normalization_templates: dict[str, str],
154
+ table_context: TableContext,
155
+ ) -> str:
156
+ """Hash a DECFLOAT mirrored as a Snowflake FLOAT as binary64, as that target does.
157
+
158
+ DMO creates DECFLOAT; only a user-mapped target lands on FLOAT, and it
159
+ holds ~16 digits, so the exact decimal text could never match it.
160
+ """
161
+ if self._parse_type_precision_scale(column.data_type or "")[0] == Db2Type.DECFLOAT:
162
+ target_type = get_paired_target_column_types(table_context).get(column.name)
163
+ if isinstance(target_type, str) and normalize_snowflake_base_type(target_type) in SNOWFLAKE_FLOAT_TYPE_NAMES:
164
+ return datatypes_normalization_templates[CommonType.FLOAT]
165
+ return super()._resolve_datatype_normalization_template(
166
+ column,
167
+ datatypes_normalization_templates,
168
+ table_context,
169
+ )
170
+
133
171
  # ------------------------------------------------------------------
134
172
  # text_comparison_mode: apply the per-column text codec (raw/logical)
135
173
  #
@@ -39,6 +39,7 @@ from snowflake.snowflake_data_validation.utils.constants import (
39
39
  from snowflake.snowflake_data_validation.utils.context import Context
40
40
  from snowflake.snowflake_data_validation.utils.iso_dv_common import (
41
41
  attach_paired_column_types_for_iso_timestamp_dv,
42
+ attach_paired_time_comparison_precision,
42
43
  )
43
44
  from snowflake.snowflake_data_validation.utils.model.table_column_metadata import (
44
45
  TableColumnMetadata,
@@ -129,6 +130,11 @@ class BaseValidationExecutor(ABC):
129
130
  table_configuration.column_mappings,
130
131
  )
131
132
  )
133
+ attach_paired_time_comparison_precision(
134
+ source_table_context,
135
+ target_table_context,
136
+ self.context.source_platform,
137
+ )
132
138
 
133
139
  if validations[SCHEMA_VALIDATION_KEY]:
134
140
  self.execute_schema_validation(
@@ -228,6 +234,7 @@ class BaseValidationExecutor(ABC):
228
234
  columns=source_table_column_metadata.columns,
229
235
  database_name=configured_object_name(self.context.source_platform, table_configuration.source_database),
230
236
  exclude_metrics=table_configuration.exclude_metrics,
237
+ include_count_distinct=bool(table_configuration.include_count_distinct),
231
238
  fully_qualified_name=table_configuration.fully_qualified_name,
232
239
  has_where_clause=table_configuration.has_where_clause,
233
240
  max_failed_rows_number=table_configuration.max_failed_rows_number,
@@ -273,6 +280,7 @@ class BaseValidationExecutor(ABC):
273
280
  columns=target_table_column_metadata.columns,
274
281
  database_name=configured_object_name(self.context.target_platform, table_configuration.target_database),
275
282
  exclude_metrics=table_configuration.exclude_metrics,
283
+ include_count_distinct=bool(table_configuration.include_count_distinct),
276
284
  fully_qualified_name=table_configuration.target_fully_qualified_name,
277
285
  has_where_clause=table_configuration.has_target_where_clause,
278
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,
@@ -43,12 +43,13 @@ SELECT
43
43
  SELECT CASE object_type
44
44
  WHEN 'TABLE' THEN 'TABLE'
45
45
  WHEN 'VIEW' THEN 'VIEW'
46
+ WHEN 'MATERIALIZED VIEW' THEN 'VIEW'
46
47
  ELSE 'UNKNOWN'
47
48
  END
48
49
  FROM ALL_OBJECTS
49
50
  WHERE owner = '{{ object_schema | escape_sql_literal }}'
50
51
  AND object_name = '{{ object_name | escape_sql_literal }}'
51
- AND object_type IN ('TABLE', 'VIEW')
52
+ AND object_type IN ('TABLE', 'VIEW', 'MATERIALIZED VIEW')
52
53
  ) AS OBJECT_TYPE,
53
54
  rc.ROW_COUNT,
54
55
  s.STAT_ROW_COUNT
@@ -88,9 +88,10 @@ SERIAL: TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC), '{{ numeric_format_mask
88
88
  SMALLINT: TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC), '{{ numeric_format_mask }}'))
89
89
  SMALLSERIAL: TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC), '{{ numeric_format_mask }}'))
90
90
  TEXT: '"{{ col_name }}"'
91
- TIME: TO_CHAR("{{ col_name }}", 'HH24:MI:SS')
91
+ # TIME: microseconds + '000' pad to nine digits, cut to the precision both sides share.
92
+ TIME: LEFT(TO_CHAR("{{ col_name }}", 'HH24:MI:SS.US') || '000', {{ time_text_length }})
92
93
  TIME WITH TIME ZONE: CASE WHEN "{{ col_name }}" IS NULL THEN NULL ELSE '1970-01-01T' || TO_CHAR(CAST("{{ col_name }}" AS TIME), 'HH24:MI:SS.US') || '000' || CASE WHEN EXTRACT(TIMEZONE FROM "{{ col_name }}") < 0 THEN '-' ELSE '+' END || LPAD(CAST(FLOOR(ABS(EXTRACT(TIMEZONE FROM "{{ col_name }}")) / 3600) AS TEXT), 2, '0') || ':' || LPAD(CAST(FLOOR(MOD(ABS(EXTRACT(TIMEZONE FROM "{{ col_name }}")), 3600) / 60) AS TEXT), 2, '0') END
93
- TIME WITHOUT TIME ZONE: TO_CHAR("{{ col_name }}", 'HH24:MI:SS')
94
+ TIME WITHOUT TIME ZONE: LEFT(TO_CHAR("{{ col_name }}", 'HH24:MI:SS.US') || '000', {{ time_text_length }})
94
95
  TIMESTAMP: TO_CHAR("{{ col_name }}", 'YYYY-MM-DD"T"HH24:MI:SS.US') || '000'
95
96
  # timestamptz has no stored offset; compare UTC instants as ISO FF9 (+00:00).
96
97
  TIMESTAMP WITH TIME ZONE: TO_CHAR(("{{ col_name }}" AT TIME ZONE 'UTC'), 'YYYY-MM-DD"T"HH24:MI:SS.US') || '000+00:00'