snowflake-data-validation 1.46.2__tar.gz → 1.47.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 (728) hide show
  1. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/PKG-INFO +64 -3
  2. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/README.md +61 -0
  3. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/pyproject.toml +10 -2
  4. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +12 -0
  5. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +66 -3
  6. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/connector/connector_base.py +12 -0
  7. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +46 -4
  8. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +50 -16
  9. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +5 -5
  10. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +8 -6
  11. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/oracle_xmltype.py +9 -4
  12. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/_internal.py +25 -10
  13. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +4 -2
  14. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +1 -0
  15. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +1 -0
  16. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +4 -0
  17. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +34 -3
  18. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +5 -0
  19. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +19 -0
  20. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +1 -1
  21. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +10 -5
  22. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +49 -3
  23. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +3 -1
  24. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/constants.py +3 -0
  25. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +51 -1
  26. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +2 -4
  27. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +18 -4
  28. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/telemetry.py +38 -29
  29. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +80 -30
  30. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +283 -37
  31. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_split_schema_query.py +17 -0
  32. snowflake_data_validation-1.47.0/tests/unit/Teradata/test_teradata_blob_metrics.py +97 -0
  33. snowflake_data_validation-1.47.0/tests/unit/Teradata/test_teradata_integer_stddev_exact.py +123 -0
  34. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +21 -0
  35. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +47 -0
  36. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/bigquery/test_query_generator_bigquery.py +157 -0
  37. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_iso_normalization.py +14 -0
  38. snowflake_data_validation-1.47.0/tests/unit/oracle/test_oracle_xmltype.py +19 -0
  39. snowflake_data_validation-1.47.0/tests/unit/query/test_template_object_name_bracketing.py +188 -0
  40. snowflake_data_validation-1.47.0/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +119 -0
  41. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_tsql_integer_stddev_exact.py +5 -4
  42. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_batched_metrics_queries.py +54 -0
  43. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_boolean_binary_canonical_templates.py +5 -4
  44. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_connector_snowflake.py +52 -0
  45. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_data_validator.py +171 -0
  46. snowflake_data_validation-1.47.0/tests/unit/test_empty_query_result_columns.py +234 -0
  47. snowflake_data_validation-1.47.0/tests/unit/test_execute_query_internal.py +94 -0
  48. snowflake_data_validation-1.47.0/tests/unit/test_hatch_linter_environment.py +36 -0
  49. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_query_executor.py +8 -6
  50. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_row_data_validator.py +663 -9
  51. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_row_data_validator_empty_chunk.py +25 -3
  52. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_sqlserver_multi_version_support.py +1 -1
  53. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_sync_validation_executor.py +190 -17
  54. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_table_context.py +53 -0
  55. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_telemetry.py +60 -0
  56. snowflake_data_validation-1.46.2/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -63
  57. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/.gitignore +0 -0
  58. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/LICENSE +0 -0
  59. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/docs/README.md +0 -0
  60. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
  61. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
  62. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
  63. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
  64. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
  65. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
  66. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
  67. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
  68. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
  69. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
  70. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +0 -0
  71. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
  72. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
  73. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
  74. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
  75. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
  76. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
  77. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
  78. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
  79. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +0 -0
  80. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
  81. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
  82. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
  83. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
  84. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +0 -0
  85. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +0 -0
  86. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +0 -0
  87. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
  88. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +0 -0
  89. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +0 -0
  90. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
  91. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
  92. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
  93. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
  94. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
  95. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
  96. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
  97. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
  98. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
  99. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
  100. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
  101. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
  102. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
  103. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
  104. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
  105. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
  106. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
  107. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/db2_lob_normalization.py +0 -0
  108. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
  109. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
  110. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
  111. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +0 -0
  112. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +0 -0
  113. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +0 -0
  114. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
  115. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
  116. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +0 -0
  117. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
  118. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
  119. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +0 -0
  120. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
  121. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
  122. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
  123. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
  124. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
  125. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
  126. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
  127. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
  128. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
  129. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
  130. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
  131. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
  132. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
  133. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
  134. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
  135. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
  136. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
  137. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
  138. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
  139. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +0 -0
  140. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
  141. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +0 -0
  142. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
  143. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/oracle_statement_functions.py +0 -0
  144. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
  145. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
  146. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +0 -0
  147. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
  148. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
  149. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
  150. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
  151. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
  152. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
  153. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
  154. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
  155. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
  156. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
  157. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
  158. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
  159. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
  160. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
  161. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
  162. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
  163. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  164. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
  165. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
  166. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
  167. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
  168. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
  169. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
  170. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
  171. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
  172. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
  173. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
  174. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
  175. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
  176. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
  177. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
  178. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
  179. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
  180. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
  181. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
  182. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
  183. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
  184. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
  185. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
  186. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
  187. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
  188. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
  189. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
  190. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
  191. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
  192. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
  193. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
  194. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
  195. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
  196. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
  197. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
  198. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
  199. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
  200. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
  201. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
  202. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
  203. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
  204. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
  205. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
  206. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
  207. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
  208. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
  209. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
  210. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
  211. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
  212. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
  213. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
  214. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
  215. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
  216. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
  217. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
  218. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
  219. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
  220. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
  221. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
  222. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
  223. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
  224. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
  225. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
  226. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
  227. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
  228. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
  229. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/decimal_text_normalization.py +0 -0
  230. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
  231. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
  232. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
  233. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/float_aggregate_reduction.py +0 -0
  234. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +0 -0
  235. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/normalization_render_context.py +0 -0
  236. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +0 -0
  237. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
  238. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
  239. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/sql_type_families.py +0 -0
  240. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/time_precision_resolution.py +0 -0
  241. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/tsql_float_bits.py +0 -0
  242. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/tsql_float_remainder.py +0 -0
  243. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
  244. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
  245. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
  246. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
  247. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
  248. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
  249. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
  250. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  251. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
  252. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
  253. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
  254. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
  255. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
  256. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
  257. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
  258. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
  259. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
  260. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_show_columns_query.sql.j2 +0 -0
  261. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
  262. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
  263. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
  264. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
  265. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
  266. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
  267. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +0 -0
  268. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
  269. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
  270. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
  271. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
  272. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
  273. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
  274. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
  275. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
  276. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
  277. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
  278. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
  279. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
  280. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
  281. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/_wkt_despace.sql.j2 +0 -0
  282. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
  283. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
  284. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
  285. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +0 -0
  286. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
  287. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
  288. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
  289. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_iceberg_format_version.sql.j2 +0 -0
  290. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
  291. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
  292. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
  293. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
  294. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
  295. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
  296. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +0 -0
  297. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
  298. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
  299. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
  300. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
  301. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
  302. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
  303. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
  304. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
  305. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
  306. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
  307. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
  308. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
  309. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
  310. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
  311. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
  312. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
  313. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
  314. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
  315. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
  316. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
  317. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
  318. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
  319. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
  320. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
  321. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
  322. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -0
  323. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
  324. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
  325. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
  326. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
  327. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
  328. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
  329. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
  330. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
  331. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
  332. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
  333. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
  334. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
  335. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
  336. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
  337. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
  338. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
  339. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
  340. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
  341. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
  342. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
  343. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
  344. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
  345. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
  346. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
  347. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
  348. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
  349. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
  350. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
  351. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
  352. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
  353. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +0 -0
  354. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
  355. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
  356. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
  357. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_string_length_normalization.py +0 -0
  358. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_tz_normalization.py +0 -0
  359. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_uniqueidentifier_normalization.py +0 -0
  360. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
  361. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
  362. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
  363. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
  364. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
  365. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
  366. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
  367. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
  368. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
  369. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
  370. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
  371. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
  372. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
  373. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
  374. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
  375. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +0 -0
  376. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
  377. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
  378. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
  379. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
  380. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
  381. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +0 -0
  382. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
  383. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
  384. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
  385. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +0 -0
  386. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
  387. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
  388. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
  389. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
  390. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
  391. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
  392. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
  393. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
  394. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
  395. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
  396. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
  397. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
  398. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
  399. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
  400. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
  401. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/dv_tracing.py +0 -0
  402. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/error_classifier.py +0 -0
  403. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
  404. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
  405. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
  406. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
  407. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
  408. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
  409. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
  410. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
  411. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
  412. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
  413. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/lob_source_types.py +0 -0
  414. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
  415. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
  416. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +0 -0
  417. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/metrics_exclusion.py +0 -0
  418. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
  419. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
  420. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/model/column_selection.py +0 -0
  421. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
  422. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
  423. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
  424. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/period_common.py +0 -0
  425. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
  426. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +0 -0
  427. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
  428. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/row_validation_lob_exclusion.py +0 -0
  429. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
  430. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
  431. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
  432. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
  433. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
  434. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +0 -0
  435. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
  436. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
  437. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
  438. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
  439. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
  440. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
  441. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
  442. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/column_pairing.py +0 -0
  443. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
  444. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
  445. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/lossy_number_mapping.py +0 -0
  446. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
  447. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
  448. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/object_type_criterion.py +0 -0
  449. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
  450. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
  451. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
  452. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
  453. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
  454. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
  455. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
  456. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
  457. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
  458. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
  459. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
  460. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
  461. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
  462. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
  463. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
  464. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
  465. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
  466. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
  467. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
  468. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
  469. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
  470. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/.coveragerc +0 -0
  471. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/conftest.py +0 -0
  472. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/integration/.coveragerc +0 -0
  473. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
  474. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/integration/test_async_generation_integration.py +0 -0
  475. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/integration/test_async_validation_integration.py +0 -0
  476. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/integration/test_reference_integration.py +0 -0
  477. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/integration/test_source_validation_integration.py +0 -0
  478. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/integration/test_sync_validation_integration.py +0 -0
  479. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Postgresql/test_postgresql_bit_count_distinct.py +0 -0
  480. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Postgresql/test_postgresql_collation.py +0 -0
  481. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Postgresql/test_postgresql_enum_metadata.py +0 -0
  482. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Postgresql/test_postgresql_json_cell_validation.py +0 -0
  483. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Postgresql/test_postgresql_jsonb_row_hash.py +0 -0
  484. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
  485. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
  486. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
  487. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
  488. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
  489. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_connector_redshift.py +0 -0
  490. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
  491. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_collation.py +0 -0
  492. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_columns_metadata_template.py +0 -0
  493. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
  494. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
  495. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_super_normalization.py +0 -0
  496. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_timetz_sentinel_normalization.py +0 -0
  497. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
  498. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_connector_teradata.py +0 -0
  499. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
  500. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_period_varchar_l1.py +0 -0
  501. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
  502. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_collation.py +0 -0
  503. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_columns_metadata_precision_scale.py +0 -0
  504. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
  505. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_table_metadata_float_precision.py +0 -0
  506. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_table_metadata_object_type.py +0 -0
  507. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_unicode_character_length.py +0 -0
  508. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
  509. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
  510. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/__init__.py +0 -0
  511. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
  512. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
  513. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
  514. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
  515. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
  516. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
  517. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
  518. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
  519. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
  520. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
  521. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
  522. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
  523. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
  524. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
  525. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
  526. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/__init__.py +0 -0
  527. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
  528. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/test_azure_synapse_l3_convert_normalization.py +0 -0
  529. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
  530. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
  531. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +0 -0
  532. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
  533. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
  534. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/bigquery/__init__.py +0 -0
  535. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/bigquery/test_bigquery_l1_string_length.py +0 -0
  536. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
  537. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
  538. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/conftest.py +0 -0
  539. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/db2/__init__.py +0 -0
  540. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/db2/test_db2_lob_dv_generation.py +0 -0
  541. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
  542. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/db2/test_db2_query_generator.py +0 -0
  543. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/db2/test_db2_registration.py +0 -0
  544. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/db2/test_db2_xml_long_dv_generation.py +0 -0
  545. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/db2/test_db2_xml_long_metrics.py +0 -0
  546. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/__init__.py +0 -0
  547. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -0
  548. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_configured_index_columns.py +0 -0
  549. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
  550. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
  551. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
  552. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
  553. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
  554. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_query_generator.py +0 -0
  555. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
  556. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_quoted_identifiers.py +0 -0
  557. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
  558. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
  559. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/query/test_normalization_render_context.py +0 -0
  560. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/query/test_time_fraction_rendering.py +0 -0
  561. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/snowflake/test_snowflake_get_case_sensitive_columns.py +0 -0
  562. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/snowflake/test_snowflake_get_iceberg_format_version.py +0 -0
  563. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
  564. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlite/__init__.py +0 -0
  565. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
  566. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
  567. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
  568. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +0 -0
  569. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
  570. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
  571. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/__init__.py +0 -0
  572. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
  573. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
  574. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_full_ingest_utc.py +0 -0
  575. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_metrics_utc.py +0 -0
  576. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_datetimeoffset_physical_target.py +0 -0
  577. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_json.py +0 -0
  578. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_l1_character_length.py +0 -0
  579. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_l1_character_maximum_length.py +0 -0
  580. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_l3_convert_normalization.py +0 -0
  581. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_length_metrics_chars.py +0 -0
  582. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
  583. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_row_queries.py +0 -0
  584. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
  585. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
  586. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_string_length_pairing.py +0 -0
  587. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_uniqueidentifier_l3_normalization.py +0 -0
  588. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/sqlserver/test_sqlserver_xml_image_metrics.py +0 -0
  589. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_accepted_transformation.py +0 -0
  590. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_arguments_manager_base.py +0 -0
  591. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_arguments_manager_factory.py +0 -0
  592. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_case_sensitive_column_pairing.py +0 -0
  593. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_catalog_column_size.py +0 -0
  594. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_catalog_queries_take_actual_names.py +0 -0
  595. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_cell_data_validator.py +0 -0
  596. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_cell_data_validator_threading.py +0 -0
  597. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_cell_validation_query_generation.py +0 -0
  598. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_charset_normalization.py +0 -0
  599. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_column_grouping.py +0 -0
  600. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_column_metadata.py +0 -0
  601. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_column_normalization_override.py +0 -0
  602. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_column_partitioning_strategy.py +0 -0
  603. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_column_selection.py +0 -0
  604. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_column_selection_actual_names.py +0 -0
  605. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_comparison_codec.py +0 -0
  606. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_comparison_orchestrator.py +0 -0
  607. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_configuration_file_editor.py +0 -0
  608. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_configuration_file_generator.py +0 -0
  609. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_configuration_file_synchronizer.py +0 -0
  610. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_configuration_loader.py +0 -0
  611. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_configuration_model.py +0 -0
  612. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_connection_pool.py +0 -0
  613. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_connector_failure_tracker.py +0 -0
  614. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_cpu_optimizer.py +0 -0
  615. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_custom_templates_models.py +0 -0
  616. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_decfloat_l2_min_max.py +0 -0
  617. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_decimal_text_canonical.py +0 -0
  618. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_dv_tracing.py +0 -0
  619. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_error_classifier.py +0 -0
  620. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_escape_odbc_value.py +0 -0
  621. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_executor_factory.py +0 -0
  622. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_extraction_keeps_catalog_column_spelling.py +0 -0
  623. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_fetch_schema_metadata.py +0 -0
  624. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_float_aggregate_reduction.py +0 -0
  625. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_float_bit_canonical.py +0 -0
  626. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_float_canonical_templates.py +0 -0
  627. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_get_configuration_file.py +0 -0
  628. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_get_target_cols.py +0 -0
  629. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_helper_dataframe.py +0 -0
  630. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_helper_io.py +0 -0
  631. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_helper_polars_cast.py +0 -0
  632. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_helper_polars_cast_threading.py +0 -0
  633. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_helpers.py +0 -0
  634. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_html_report_builder.py +0 -0
  635. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_iceberg_dv_l3_normalization.py +0 -0
  636. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_iceberg_v2_metrics_exclusion.py +0 -0
  637. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_index_key_format.py +0 -0
  638. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_internal_helpers.py +0 -0
  639. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_interval_common.py +0 -0
  640. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_iso_dv_common.py +0 -0
  641. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_l2_collation_metadata.py +0 -0
  642. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_l2_count_distinct_opt_in_config.py +0 -0
  643. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_logging_config.py +0 -0
  644. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_lossy_number_mapping.py +0 -0
  645. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_metric_identifier_rendering.py +0 -0
  646. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_metrics_exclusion.py +0 -0
  647. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_metrics_reshape.py +0 -0
  648. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_metrics_result_shape.py +0 -0
  649. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_metrics_templates_casts.py +0 -0
  650. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_metrics_tolerance.py +0 -0
  651. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_normalize_shape_aware.py +0 -0
  652. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_numeric_scale_resolution.py +0 -0
  653. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_object_type_criterion.py +0 -0
  654. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_parallel_execution_engine_fatal_errors.py +0 -0
  655. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_period_common.py +0 -0
  656. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_platform_bridge.py +0 -0
  657. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_postgresql_normalization_templates.py +0 -0
  658. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_postgresql_tz_normalization.py +0 -0
  659. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_pushdown_diff_sql.py +0 -0
  660. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_query_cell_level_validation.py +0 -0
  661. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_query_generator_numeric_scale.py +0 -0
  662. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_query_metrics_level_validation.py +0 -0
  663. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_query_to_dataframe.py +0 -0
  664. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_query_validator.py +0 -0
  665. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_qvci_fallback.py +0 -0
  666. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
  667. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_qvci_fallback_triggers.py +0 -0
  668. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_redshift_iceberg_timestamp_metrics.py +0 -0
  669. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_redshift_native_timestamptz_ltz.py +0 -0
  670. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_report_metadata.py +0 -0
  671. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_result_set_cell_level_validation.py +0 -0
  672. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
  673. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_result_set_snapshot_generation.py +0 -0
  674. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_result_set_snapshot_validation.py +0 -0
  675. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_result_set_to_dataframe.py +0 -0
  676. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_result_set_validator.py +0 -0
  677. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_row_count_bigint_overflow.py +0 -0
  678. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_row_hash_column_delimiter.py +0 -0
  679. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_row_partitioning_strategy.py +0 -0
  680. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_row_validation_lob_exclusion.py +0 -0
  681. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_row_validation_report_buffer.py +0 -0
  682. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_schema_accepted_native_datatypes.py +0 -0
  683. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_schema_column_selection.py +0 -0
  684. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_schema_query_capability.py +0 -0
  685. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_shutdown_coordinator.py +0 -0
  686. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_signature_external_table.py +0 -0
  687. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_signature_row_md5_query.py +0 -0
  688. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_snapshot_validation_statements.py +0 -0
  689. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_snowflake_arguments_manager.py +0 -0
  690. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
  691. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_snowflake_redshift_super_size_guard.py +0 -0
  692. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_source_validation_executor.py +0 -0
  693. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
  694. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_sql_catalog_template_guard.py +0 -0
  695. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_sql_literal_jinja_filter.py +0 -0
  696. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_sqlite_validation_connection.py +0 -0
  697. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
  698. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_sync_executor_qvci_fallback.py +0 -0
  699. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_sync_schema_validation_real_callbacks.py +0 -0
  700. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_table_column_metadata_model.py +0 -0
  701. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_table_configuration.py +0 -0
  702. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_table_metadata_processor.py +0 -0
  703. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_table_snapshot_generation.py +0 -0
  704. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_table_snapshot_validation.py +0 -0
  705. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_target_platform_factory.py +0 -0
  706. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_templates_loader_manager.py +0 -0
  707. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_teradata_iso_normalization.py +0 -0
  708. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_teradata_string_rtrim_policy.py +0 -0
  709. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_teradata_timetz_metric_domain.py +0 -0
  710. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_teradata_type_code_mapping.py +0 -0
  711. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_timestamp_golden_vectors.py +0 -0
  712. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_trace_bridge.py +0 -0
  713. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_tsql_float_l2_aggregates.py +0 -0
  714. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_validation_configuration.py +0 -0
  715. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_validation_database_connection.py +0 -0
  716. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_validation_execution_context.py +0 -0
  717. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_validation_progress_reporter.py +0 -0
  718. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_validation_report_buffer.py +0 -0
  719. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_validation_report_status.py +0 -0
  720. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_validation_templates_dto.py +0 -0
  721. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_vector_bit_normalization.py +0 -0
  722. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_vector_common.py +0 -0
  723. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_vector_normalization.py +0 -0
  724. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_view_configuration.py +0 -0
  725. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/test_warm_start.py +0 -0
  726. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/utils/__init__.py +0 -0
  727. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.0}/tests/unit/utils/test_constants.py +0 -0
  728. {snowflake_data_validation-1.46.2 → snowflake_data_validation-1.47.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.46.2
3
+ Version: 1.47.0
4
4
  Summary: Snowflake Data Validation
5
5
  Project-URL: Bug Tracker, https://github.com/snowflake-eng/migrations-data-validation/issues
6
6
  Project-URL: Source code, https://github.com/snowflake-eng/migrations-data-validation/
@@ -38,7 +38,7 @@ Requires-Dist: pydantic-yaml>=1.4.0
38
38
  Requires-Dist: pydantic>=2.0
39
39
  Requires-Dist: pyyaml>=6.0
40
40
  Requires-Dist: ruamel-yaml>=0.18.0
41
- Requires-Dist: snowflake-connector-python<5,>=4.7.3
41
+ Requires-Dist: snowflake-connector-python<6,>=5
42
42
  Requires-Dist: toml>=0.10.2
43
43
  Requires-Dist: typer>=0.15.3
44
44
  Requires-Dist: typing-extensions>=4.13.2
@@ -79,7 +79,7 @@ Requires-Dist: psycopg[binary]>=3.2.0; extra == 'postgresql'
79
79
  Provides-Extra: redshift
80
80
  Requires-Dist: redshift-connector>=2.1.14; extra == 'redshift'
81
81
  Provides-Extra: scai
82
- Requires-Dist: snowflake-code-unit-registry>=0.9.10; extra == 'scai'
82
+ Requires-Dist: snowflake-code-unit-registry>=0.9.15; extra == 'scai'
83
83
  Provides-Extra: sqlite
84
84
  Requires-Dist: sqlean-py>=3.45.0; extra == 'sqlite'
85
85
  Provides-Extra: sqlserver
@@ -182,6 +182,14 @@ L1 and L2 read each column's catalog spelling rather than an upper-cased name, s
182
182
 
183
183
  ### Views
184
184
 
185
+ SQL Server and Azure Synapse source scans delimit each configured object-name part
186
+ through the shared identifier manager. Reserved words, dots inside quoted parts,
187
+ escaped closing brackets, and omitted schema segments remain valid in generated
188
+ SQL, including whitespace between a separator and a quoted part.
189
+ The platform-aware table-context configuration boundary parses T-SQL references
190
+ into actual name components once; repeated queries write those components without
191
+ reinterpreting quote characters or reparsing the original configuration.
192
+
185
193
  For **Redshift** and **Teradata** sources, views are validated on the view itself (no `CREATE TABLE AS SELECT` materialization in local sync mode). Other platforms may still materialize views to temporary tables before L1/L2/L3. **Teradata** views are read via `DBC.ColumnsQV` (Teradata's Query View Column Information catalog), so view L1 covers the full field set — column existence, datatype, precision, scale, length, nullability, and ordinal position — matching the table path. When `DBC.ColumnsQV` is unavailable (QVCI disabled → Teradata error 9719, missing `SELECT` grant, any other failure of that catalog query, or a degenerate result with null `DATA_TYPE`), the extractor falls back to `HELP COLUMN` with `basic_validation=True` and emits one WARNING schema row per view naming the trigger and the remediation. If HELP fails or source schema metadata still has no usable `DATA_TYPE` (including a view validated as a table whose `ColumnsV` types are null), L1 fails that object and does not continue to L2/L3. **Redshift** uses full schema metadata like tables.
186
194
 
187
195
  ### Row Validation
@@ -190,6 +198,26 @@ Performs row-by-row comparison:
190
198
  - Field-level value comparison
191
199
  - Mismatch reporting
192
200
 
201
+ Row-MD5 results preserve the exact key aliases projected from actual catalog names; joins and report predicates do not uppercase or case-fold those aliases. Distinct keys such as `MixedCase` and `MIXEDCASE` keep their own values. Join alignment accepts an exact `_IDX` projection alias when the key's direct alias is absent; reports read the resulting canonical aliases directly. Each report side takes its identifier and literal rules from the same query generator. Only the generated hash alias is recognized by its dialect spelling (`row_md5` on PostgreSQL/Redshift). An index named `ROW_MD5` conflicts with that reserved result column and is rejected rather than used as a hash. Empty results retain cursor headers and complete missing join/hash columns; populated results fail explicitly for a missing key alias (including a known exclusion) or a missing row-MD5 column rather than guessing another key by casing.
202
+
203
+ For each mismatched row, the report holds a source and a target `SELECT` that find that row, and the run also saves a diff query per side. Each side's queries write names by that side's identifier rules: every part of the object name is read as that platform reads a configured name (an unquoted part folds to its storage case, a quoted part is kept) and written delimited, and every key column is written delimited too. So a SQL Server or Azure Synapse `Load.dbo.File` is queried as `[Load].[dbo].[File]`, the Snowflake target `LOAD.DBO.FILE` as `"LOAD"."DBO"."FILE"`, and a BigQuery key column as `` `Order Id` ``; a reserved word such as `File` stays valid. The report's table name and the saved query file names keep the configured name (`Load.dbo.File`). A string key is escaped by the query generator of the platform that runs that side (`escape_string_literal`). Most dialects use standard SQL and double an apostrophe. Snowflake also doubles backslashes, because it reads a backslash in a string literal as an escape, and BigQuery backslash-escapes both backslashes and apostrophes. A platform whose literals differ overrides `escape_string_literal` on its query generator.
204
+
205
+ Redshift also doubles backslashes and apostrophes. PostgreSQL's standard-SQL escaping assumes `standard_conforming_strings=on` (the server default since PostgreSQL 9.1); the connector does not set this session option. The unit tests check generated literal text for all ten engine dialects, not live database parsing.
206
+
207
+ Qualified source references retain parsed actual components until the identifier
208
+ manager writes SQL. At the table-context boundary, an explicitly supplied actual
209
+ schema fills an omitted schema position; it is not reparsed or replaced with
210
+ `dbo`. Without a resolved schema, valid omitted-position syntax such as
211
+ `tempdb..#snapshot` remains omitted. Separate internal temporary references do
212
+ not inherit the source table's schema. Catalog predicates likewise escape actual
213
+ names as string values rather than stripping literal brackets, quotes or padding.
214
+
215
+ Row-query result labels retain their exact aliases. Catalog-metadata boundaries
216
+ normalize only field labels (such as `DATA_TYPE` and `ROW_COUNT`) for metadata
217
+ consumers; actual column-name values remain unchanged, including mixed case.
218
+
219
+ A key present once on each side is a `MISMATCH` when its row MD5s differ. A NULL row MD5 on one side against a digest on the other is a difference too; NULL on both sides is a match. This is the `IS DISTINCT FROM` rule the Snowflake pushdown compare uses (`docs/common/l3-signature-pushdown-compare.md`).
220
+
193
221
  ---
194
222
 
195
223
  ## 📊 Reports
@@ -222,6 +250,18 @@ Raising `requires-python` here above the pinned version fails the audit until th
222
250
 
223
251
  ---
224
252
 
253
+ ## 🧩 Custom result processors
254
+
255
+ `execute_query` and `execute_query_from_table_configuration` take an optional
256
+ `result_processor(raw_result, apply_column_validated_uppercase)` that turns the
257
+ connector's raw result into a DataFrame. A processor you pass is called for every
258
+ result, an empty one included, with the `apply_column_validated_uppercase` flag,
259
+ and the DataFrame it returns is the result, so the columns it gives an empty
260
+ frame are kept. Without one, the platform's default processor is used and an
261
+ empty result becomes an empty DataFrame with no columns.
262
+
263
+ ---
264
+
225
265
  ## 📚 Documentation
226
266
 
227
267
  For configuration options and examples, see the [official documentation](https://docs.snowflake.com/en/migrations/snowconvert-docs/data-validation-cli/CLI_QUICK_REFERENCE).
@@ -230,6 +270,27 @@ For configuration options and examples, see the [official documentation](https:/
230
270
 
231
271
  ## Changelog
232
272
 
273
+ ### v1.47.0
274
+
275
+ **New features**
276
+
277
+ - Added L1, L2, and L3 validation of BigQuery Iceberg tables.
278
+ - Added L2 and L3 comparison of Teradata `BLOB` and `CLOB` columns.
279
+
280
+ **Improvements**
281
+
282
+ - Improved Teradata L2 validation to compute the standard deviation of integer columns exactly.
283
+ - Updated the Snowflake connector to `snowflake-connector-python` 5.x.
284
+
285
+ **Bug fixes**
286
+
287
+ - Fixed row validation losing join keys when their casing differed or the key column was excluded.
288
+ - Fixed row validation of tables with duplicate keys by matching duplicate-key rows as multisets, and quoted SQL Server identifiers.
289
+ - Fixed custom processing being dropped when a query returned no rows.
290
+ - Fixed the saved row-diff SQL ending in an empty `WHERE` when every mismatched row was missing on one side.
291
+ - Fixed the row drill-down treating a `NULL` `ROW_MD5` on one side as equal to a digest on the other.
292
+ - Fixed Oracle `TIMESTAMP WITH LOCAL TIME ZONE` and `XMLTYPE` comparison by reading them as UTC text and compact `XMLSERIALIZE` text.
293
+
233
294
  ### v1.46.2
234
295
 
235
296
  **Improvements**
@@ -91,6 +91,14 @@ L1 and L2 read each column's catalog spelling rather than an upper-cased name, s
91
91
 
92
92
  ### Views
93
93
 
94
+ SQL Server and Azure Synapse source scans delimit each configured object-name part
95
+ through the shared identifier manager. Reserved words, dots inside quoted parts,
96
+ escaped closing brackets, and omitted schema segments remain valid in generated
97
+ SQL, including whitespace between a separator and a quoted part.
98
+ The platform-aware table-context configuration boundary parses T-SQL references
99
+ into actual name components once; repeated queries write those components without
100
+ reinterpreting quote characters or reparsing the original configuration.
101
+
94
102
  For **Redshift** and **Teradata** sources, views are validated on the view itself (no `CREATE TABLE AS SELECT` materialization in local sync mode). Other platforms may still materialize views to temporary tables before L1/L2/L3. **Teradata** views are read via `DBC.ColumnsQV` (Teradata's Query View Column Information catalog), so view L1 covers the full field set — column existence, datatype, precision, scale, length, nullability, and ordinal position — matching the table path. When `DBC.ColumnsQV` is unavailable (QVCI disabled → Teradata error 9719, missing `SELECT` grant, any other failure of that catalog query, or a degenerate result with null `DATA_TYPE`), the extractor falls back to `HELP COLUMN` with `basic_validation=True` and emits one WARNING schema row per view naming the trigger and the remediation. If HELP fails or source schema metadata still has no usable `DATA_TYPE` (including a view validated as a table whose `ColumnsV` types are null), L1 fails that object and does not continue to L2/L3. **Redshift** uses full schema metadata like tables.
95
103
 
96
104
  ### Row Validation
@@ -99,6 +107,26 @@ Performs row-by-row comparison:
99
107
  - Field-level value comparison
100
108
  - Mismatch reporting
101
109
 
110
+ Row-MD5 results preserve the exact key aliases projected from actual catalog names; joins and report predicates do not uppercase or case-fold those aliases. Distinct keys such as `MixedCase` and `MIXEDCASE` keep their own values. Join alignment accepts an exact `_IDX` projection alias when the key's direct alias is absent; reports read the resulting canonical aliases directly. Each report side takes its identifier and literal rules from the same query generator. Only the generated hash alias is recognized by its dialect spelling (`row_md5` on PostgreSQL/Redshift). An index named `ROW_MD5` conflicts with that reserved result column and is rejected rather than used as a hash. Empty results retain cursor headers and complete missing join/hash columns; populated results fail explicitly for a missing key alias (including a known exclusion) or a missing row-MD5 column rather than guessing another key by casing.
111
+
112
+ For each mismatched row, the report holds a source and a target `SELECT` that find that row, and the run also saves a diff query per side. Each side's queries write names by that side's identifier rules: every part of the object name is read as that platform reads a configured name (an unquoted part folds to its storage case, a quoted part is kept) and written delimited, and every key column is written delimited too. So a SQL Server or Azure Synapse `Load.dbo.File` is queried as `[Load].[dbo].[File]`, the Snowflake target `LOAD.DBO.FILE` as `"LOAD"."DBO"."FILE"`, and a BigQuery key column as `` `Order Id` ``; a reserved word such as `File` stays valid. The report's table name and the saved query file names keep the configured name (`Load.dbo.File`). A string key is escaped by the query generator of the platform that runs that side (`escape_string_literal`). Most dialects use standard SQL and double an apostrophe. Snowflake also doubles backslashes, because it reads a backslash in a string literal as an escape, and BigQuery backslash-escapes both backslashes and apostrophes. A platform whose literals differ overrides `escape_string_literal` on its query generator.
113
+
114
+ Redshift also doubles backslashes and apostrophes. PostgreSQL's standard-SQL escaping assumes `standard_conforming_strings=on` (the server default since PostgreSQL 9.1); the connector does not set this session option. The unit tests check generated literal text for all ten engine dialects, not live database parsing.
115
+
116
+ Qualified source references retain parsed actual components until the identifier
117
+ manager writes SQL. At the table-context boundary, an explicitly supplied actual
118
+ schema fills an omitted schema position; it is not reparsed or replaced with
119
+ `dbo`. Without a resolved schema, valid omitted-position syntax such as
120
+ `tempdb..#snapshot` remains omitted. Separate internal temporary references do
121
+ not inherit the source table's schema. Catalog predicates likewise escape actual
122
+ names as string values rather than stripping literal brackets, quotes or padding.
123
+
124
+ Row-query result labels retain their exact aliases. Catalog-metadata boundaries
125
+ normalize only field labels (such as `DATA_TYPE` and `ROW_COUNT`) for metadata
126
+ consumers; actual column-name values remain unchanged, including mixed case.
127
+
128
+ A key present once on each side is a `MISMATCH` when its row MD5s differ. A NULL row MD5 on one side against a digest on the other is a difference too; NULL on both sides is a match. This is the `IS DISTINCT FROM` rule the Snowflake pushdown compare uses (`docs/common/l3-signature-pushdown-compare.md`).
129
+
102
130
  ---
103
131
 
104
132
  ## 📊 Reports
@@ -131,6 +159,18 @@ Raising `requires-python` here above the pinned version fails the audit until th
131
159
 
132
160
  ---
133
161
 
162
+ ## 🧩 Custom result processors
163
+
164
+ `execute_query` and `execute_query_from_table_configuration` take an optional
165
+ `result_processor(raw_result, apply_column_validated_uppercase)` that turns the
166
+ connector's raw result into a DataFrame. A processor you pass is called for every
167
+ result, an empty one included, with the `apply_column_validated_uppercase` flag,
168
+ and the DataFrame it returns is the result, so the columns it gives an empty
169
+ frame are kept. Without one, the platform's default processor is used and an
170
+ empty result becomes an empty DataFrame with no columns.
171
+
172
+ ---
173
+
134
174
  ## 📚 Documentation
135
175
 
136
176
  For configuration options and examples, see the [official documentation](https://docs.snowflake.com/en/migrations/snowconvert-docs/data-validation-cli/CLI_QUICK_REFERENCE).
@@ -139,6 +179,27 @@ For configuration options and examples, see the [official documentation](https:/
139
179
 
140
180
  ## Changelog
141
181
 
182
+ ### v1.47.0
183
+
184
+ **New features**
185
+
186
+ - Added L1, L2, and L3 validation of BigQuery Iceberg tables.
187
+ - Added L2 and L3 comparison of Teradata `BLOB` and `CLOB` columns.
188
+
189
+ **Improvements**
190
+
191
+ - Improved Teradata L2 validation to compute the standard deviation of integer columns exactly.
192
+ - Updated the Snowflake connector to `snowflake-connector-python` 5.x.
193
+
194
+ **Bug fixes**
195
+
196
+ - Fixed row validation losing join keys when their casing differed or the key column was excluded.
197
+ - Fixed row validation of tables with duplicate keys by matching duplicate-key rows as multisets, and quoted SQL Server identifiers.
198
+ - Fixed custom processing being dropped when a query returned no rows.
199
+ - Fixed the saved row-diff SQL ending in an empty `WHERE` when every mismatched row was missing on one side.
200
+ - Fixed the row drill-down treating a `NULL` `ROW_MD5` on one side as equal to a digest on the other.
201
+ - Fixed Oracle `TIMESTAMP WITH LOCAL TIME ZONE` and `XMLTYPE` comparison by reading them as UTC text and compact `XMLSERIALIZE` text.
202
+
142
203
  ### v1.46.2
143
204
 
144
205
  **Improvements**
@@ -36,7 +36,7 @@ dependencies = [
36
36
  "connectorx>=0.3.0",
37
37
  "cryptography>=50.0.0",
38
38
  "deepdiff>=8.0.0",
39
- "snowflake-connector-python>=4.7.3,<5",
39
+ "snowflake-connector-python>=5,<6",
40
40
  "pandas>=2.2.3",
41
41
  "polars>=1.0.0",
42
42
  "pyarrow>=14.0.0",
@@ -106,7 +106,7 @@ db2 = [
106
106
  # musllinux build, and SDV is published to public PyPI. Inside DMO/DEA the
107
107
  # dependency is already declared, so SDV's logger tree is covered there.
108
108
  scai = [
109
- "snowflake-code-unit-registry>=0.9.10",
109
+ "snowflake-code-unit-registry>=0.9.15",
110
110
  ]
111
111
 
112
112
  [project.urls]
@@ -192,6 +192,14 @@ exclude_lines = [
192
192
  "if __name__ == .__main__.:",
193
193
  ]
194
194
 
195
+ # Ruff only reads the sources, so the linter needs neither the package nor its drivers.
196
+ [tool.hatch.envs.linter]
197
+ detached = true
198
+ installer = "uv"
199
+ dependencies = [
200
+ "ruff>=0.15",
201
+ ]
202
+
195
203
  [tool.hatch.envs.linter.scripts]
196
204
  check = [
197
205
  "echo 'Running linting checks...' && ruff check --config=../ruff.toml --statistics --verbose . || (echo '❌ LINTING FAILED: Please fix the above linting issues before proceeding. Use \"ruff check --config=../ruff.toml --fix .\" to auto-fix some issues, or fix them manually.' && exit 1)",
@@ -96,4 +96,16 @@ GEOGRAPHY: CASE WHEN `{{ col_name }}` IS NULL THEN NULL ELSE TRIM(REPLACE(REPLAC
96
96
  INTERVAL: CAST(`{{ col_name }}` AS STRING)
97
97
  RANGE: CAST(`{{ col_name }}` AS STRING)
98
98
 
99
+ # Iceberg EXPORT DATA text. Compatible clocks are the export format (no offset,
100
+ # six fractional digits). Native TIMESTAMP_NTZ pads those six digits to the nine
101
+ # Snowflake TO_CHAR prints for Iceberg v3. JSON/STRUCT/ARRAY hash TO_JSON_STRING,
102
+ # the same text the extract wrote, including the size guard the VARCHAR target uses.
103
+ TIMESTAMP_ICEBERG: FORMAT_TIMESTAMP('%Y-%m-%dT%H:%M:%E6S', `{{ col_name }}`)
104
+ DATETIME_ICEBERG: FORMAT_DATETIME('%Y-%m-%dT%H:%M:%E6S', `{{ col_name }}`)
105
+ TIME_ICEBERG: CAST(`{{ col_name }}` AS STRING)
106
+ TIMESTAMP_ICEBERG_NTZ: FORMAT_TIMESTAMP('%E4Y-%m-%dT%H:%M:%E6S', `{{ col_name }}`) || '000'
107
+ DATETIME_ICEBERG_NTZ: FORMAT_DATETIME('%E4Y-%m-%dT%H:%M:%E6S', `{{ col_name }}`) || '000'
108
+ BIGNUMERIC_ICEBERG: CAST(`{{ col_name }}` AS STRING)
109
+ JSON_ICEBERG: CASE WHEN `{{ col_name }}` IS NULL THEN NULL WHEN BYTE_LENGTH(TO_JSON_STRING(`{{ col_name }}`)) > {{ semi_structured_size_limit_bytes }} THEN '{{ semi_structured_size_excluded_sentinel }}' ELSE NULLIF(TO_JSON_STRING(`{{ col_name }}`), 'null') END
110
+
99
111
  DEFAULT: CAST(`{{ col_name }}` AS STRING)
@@ -38,8 +38,15 @@ from snowflake.snowflake_data_validation.query.query_generator_base import (
38
38
  from snowflake.snowflake_data_validation.utils.constants import (
39
39
  COL_NAME_NO_QUOTES_PLACEHOLDER,
40
40
  METRIC_COLUMN_MODIFIER_PLACEHOLDER,
41
+ SEMI_STRUCTURED_EXPORT_SIZE_LIMIT_BYTES,
42
+ SEMI_STRUCTURED_SIZE_EXCLUDED_SENTINEL,
41
43
  Platform,
42
44
  )
45
+ from snowflake.snowflake_data_validation.utils.iceberg_dv_common import (
46
+ ICEBERG_BIGQUERY_NUMERIC_TYPE,
47
+ IcebergProfile,
48
+ resolve_iceberg_bigquery_source_normalization_key,
49
+ )
43
50
  from snowflake.snowflake_data_validation.utils.iso_dv_common import (
44
51
  get_paired_target_column_types,
45
52
  normalize_snowflake_base_type,
@@ -60,6 +67,7 @@ if TYPE_CHECKING: # pragma: no cover - used only for type hints.
60
67
  LOGGER = logging.getLogger(__name__)
61
68
 
62
69
  _WIDE_NUMERIC_BASE_TYPES = frozenset({BigQueryType.BIGNUMERIC, BigQueryType.BIGDECIMAL})
70
+ _ICEBERG_DECIMAL128_SOURCE_TYPES = frozenset({CommonType.NUMERIC, CommonType.DECIMAL})
63
71
  # Normalization key for a BIGNUMERIC / BIGDECIMAL whose Snowflake mirror is DECFLOAT.
64
72
  BIGNUMERIC_DECFLOAT_NORMALIZATION_KEY = "BIGNUMERIC_DECFLOAT"
65
73
  # Normalization key for an ARRAY / STRUCT holding no NUMERIC / BIGNUMERIC, which data
@@ -100,6 +108,10 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
100
108
  """Initialize the BigQuery query generator."""
101
109
  super().__init__(platform=Platform.BIGQUERY)
102
110
 
111
+ def escape_string_literal(self, value: str) -> str:
112
+ r"""Backslash-escape backslashes and quotes: BigQuery reads ``\\`` and ``\'`` in a literal, not ``''``."""
113
+ return value.replace("\\", "\\\\").replace("'", "\\'")
114
+
103
115
  def _measure_collation_tokens(self, column, metric_name: str) -> tuple[str, str]:
104
116
  """Force binary DISTINCT semantics only for metadata-gated STRING columns."""
105
117
  if (
@@ -247,7 +259,21 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
247
259
  table_context: TableContext,
248
260
  ) -> str:
249
261
  base_type = self.normalize_bigquery_type(column.data_type)
250
- if self._lands_in_decfloat(column, table_context):
262
+ profile = IcebergProfile.from_table_context(table_context)
263
+ paired = get_paired_target_column_types(table_context).get(column.name)
264
+ iceberg_key = resolve_iceberg_bigquery_source_normalization_key(
265
+ base_type,
266
+ is_iceberg=profile.is_active,
267
+ paired_target_type=paired if isinstance(paired, str) else None,
268
+ )
269
+ if iceberg_key != base_type and not has_custom_column_normalization(
270
+ column.name,
271
+ base_type,
272
+ column_normalization_map=None,
273
+ templates_loader_manager=table_context.templates_loader_manager,
274
+ ):
275
+ base_type = iceberg_key
276
+ elif self._lands_in_decfloat(column, table_context):
251
277
  base_type = BIGNUMERIC_DECFLOAT_NORMALIZATION_KEY
252
278
  elif serializes_exactly_through_to_json(column.data_type) and not has_custom_column_normalization(
253
279
  column.name,
@@ -284,6 +310,31 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
284
310
  return None
285
311
  return f"NULLIF(TO_JSON_STRING(PARSE_JSON({field_wise})), 'null')"
286
312
 
313
+ def _iceberg_field_wise_normalization(self, column: ColumnMetadata) -> str | None:
314
+ """Hash the field-wise JSON text the Iceberg extract wrote, without PARSE_JSON."""
315
+ column_ref = f"`{self._normalization_column_name(column)}`"
316
+ field_wise = field_wise_json_text(column.data_type, column_ref)
317
+ if field_wise is None:
318
+ return None
319
+ limit = SEMI_STRUCTURED_EXPORT_SIZE_LIMIT_BYTES
320
+ sentinel = SEMI_STRUCTURED_SIZE_EXCLUDED_SENTINEL
321
+ return (
322
+ f"CASE WHEN {column_ref} IS NULL THEN NULL "
323
+ f"WHEN BYTE_LENGTH({field_wise}) > {limit} THEN '{sentinel}' "
324
+ f"ELSE NULLIF({field_wise}, 'null') END"
325
+ )
326
+
327
+ def _column_with_iceberg_numeric_scale(self, column: ColumnMetadata, table_context: TableContext) -> ColumnMetadata:
328
+ """Force NUMERIC/DECIMAL scale to 9 so the source mask matches NUMBER(38,9)."""
329
+ if self.normalize_bigquery_type(column.data_type) not in _ICEBERG_DECIMAL128_SOURCE_TYPES:
330
+ return column
331
+ paired = get_paired_target_column_types(table_context).get(column.name)
332
+ if not isinstance(paired, str) or normalize_snowflake_base_type(paired) != CommonType.NUMBER:
333
+ return column
334
+ rendered = column.copy()
335
+ rendered.data_type = ICEBERG_BIGQUERY_NUMERIC_TYPE
336
+ return rendered
337
+
287
338
  def _column_normalization(
288
339
  self,
289
340
  column: ColumnMetadata,
@@ -295,10 +346,21 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
295
346
  A user's normalization, a per-column rule or an override of the column's base type
296
347
  (``STRUCT``, ``ARRAY``), wins over the built-in field-wise text.
297
348
  """
349
+ base_type = self.normalize_bigquery_type(column.data_type)
350
+ profile = IcebergProfile.from_table_context(table_context)
351
+ if profile.is_active:
352
+ iceberg_field_wise = self._iceberg_field_wise_normalization(column)
353
+ if iceberg_field_wise is not None and not has_custom_column_normalization(
354
+ column.name,
355
+ base_type,
356
+ column_normalization_map,
357
+ table_context.templates_loader_manager,
358
+ ):
359
+ return iceberg_field_wise
298
360
  field_wise = self._field_wise_normalization(column)
299
361
  if field_wise is not None and not has_custom_column_normalization(
300
362
  column.name,
301
- self.normalize_bigquery_type(column.data_type),
363
+ base_type,
302
364
  column_normalization_map,
303
365
  table_context.templates_loader_manager,
304
366
  ):
@@ -315,7 +377,8 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
315
377
  )
316
378
  # Resolve ``{{ col_name }}`` and, for numeric types, the scale-aware
317
379
  # ``{{ numeric_format_mask }}`` (BigQuery emits a printf ``%.Nf``).
318
- return self._render_normalization_template(normalization_template, column)
380
+ rendered_column = self._column_with_iceberg_numeric_scale(column, table_context) if profile.is_active else column
381
+ return self._render_normalization_template(normalization_template, rendered_column)
319
382
 
320
383
  def _build_datatypes_normalization_renderer_templates(
321
384
  self,
@@ -14,10 +14,14 @@
14
14
  # limitations under the License.
15
15
 
16
16
 
17
+ from __future__ import annotations
18
+
17
19
  import logging
18
20
  import time
19
21
 
20
22
  from abc import ABC, abstractmethod
23
+ from collections.abc import Callable
24
+ from typing import TYPE_CHECKING
21
25
 
22
26
  from snowflake.snowflake_data_validation.connector.connector_failure_tracker import (
23
27
  ConnectionFailureTracker,
@@ -27,6 +31,10 @@ from snowflake.snowflake_data_validation.utils.constants import (
27
31
  )
28
32
 
29
33
 
34
+ if TYPE_CHECKING:
35
+ import pandas as pd
36
+
37
+
30
38
  class ConnectorBase(ABC):
31
39
  """Abstract base class for database connectors."""
32
40
 
@@ -162,6 +170,10 @@ class ConnectorBase(ABC):
162
170
  """Execute a query on the database."""
163
171
  pass
164
172
 
173
+ def get_result_processor(self) -> Callable[[list, bool], pd.DataFrame] | None:
174
+ """Return a connector-specific normalizer, or use the platform default."""
175
+ return None
176
+
165
177
  @abstractmethod
166
178
  def execute_statement(self, statement: str) -> None:
167
179
  """Execute a statement on the database."""
@@ -27,6 +27,7 @@ public workflow API module:
27
27
  """
28
28
 
29
29
  import hashlib
30
+ import logging
30
31
 
31
32
  from collections.abc import Callable
32
33
  from concurrent.futures import ThreadPoolExecutor
@@ -34,6 +35,7 @@ from typing import Any
34
35
 
35
36
  import pandas as pd
36
37
 
38
+ from shared.identifiers.managers import identifier_manager
37
39
  from snowflake.snowflake_data_validation.connector.connector_base import (
38
40
  ConnectorBase,
39
41
  )
@@ -80,9 +82,12 @@ from snowflake.snowflake_data_validation.utils.telemetry import (
80
82
  report_telemetry,
81
83
  )
82
84
  from snowflake.snowflake_data_validation.validation.row_data_validator import (
85
+ ROW_MD5_KEY,
83
86
  SOURCE_SUFFIX,
84
87
  TARGET_SUFFIX,
88
+ MissingRowJoinColumnError,
85
89
  RowDataValidator,
90
+ RowReportSide,
86
91
  )
87
92
  from snowflake.snowflake_data_validation.validation.validation_report_buffer import (
88
93
  ValidationReportBuffer,
@@ -91,6 +96,23 @@ from snowflake.snowflake_data_validation.validation.validation_report_buffer imp
91
96
 
92
97
  # ``execute_query``'s ``result_processor(raw_result, apply_column_validated_uppercase)``.
93
98
  SchemaResultProcessor = Callable[[list[Any], bool], pd.DataFrame]
99
+ LOGGER = logging.getLogger(__name__)
100
+
101
+
102
+ def _suffix_row_result(frame: pd.DataFrame, suffix: str, table_context: TableContext) -> pd.DataFrame:
103
+ """Recognize the generated unquoted hash alias; preserve every actual key alias."""
104
+ if any(column.name == ROW_MD5_KEY for column in table_context.index_column_collection):
105
+ raise MissingRowJoinColumnError(f"index column {ROW_MD5_KEY} conflicts with the reserved row MD5 alias")
106
+ try:
107
+ manager = identifier_manager(table_context.platform)
108
+ except ValueError:
109
+ LOGGER.debug(f"Dialect alias rules are unavailable for {table_context.platform}; retaining the generated hash alias")
110
+ hash_alias = ROW_MD5_KEY
111
+ else:
112
+ hash_alias = manager.parse_identifier(ROW_MD5_KEY)
113
+ if hash_alias != ROW_MD5_KEY and hash_alias in frame.columns and ROW_MD5_KEY not in frame.columns:
114
+ frame = frame.rename(columns={hash_alias: ROW_MD5_KEY})
115
+ return frame.convert_dtypes().add_suffix(suffix)
94
116
 
95
117
 
96
118
  def _ignoring_case_flag(process: Callable[[list], pd.DataFrame]) -> Callable[[list, bool], pd.DataFrame]:
@@ -441,8 +463,8 @@ class SyncValidationExecutor(BaseValidationExecutor):
441
463
 
442
464
  source_index_column_collection = [column.name for column in source_table_context.index_column_collection]
443
465
  target_index_column_collection = [column.name for column in target_table_context.index_column_collection]
444
- source_index_column_suffix_collection = [col.upper() + SOURCE_SUFFIX for col in source_index_column_collection]
445
- target_index_column_suffix_collection = [col.upper() + TARGET_SUFFIX for col in target_index_column_collection]
466
+ source_index_column_suffix_collection = [col + SOURCE_SUFFIX for col in source_index_column_collection]
467
+ target_index_column_suffix_collection = [col + TARGET_SUFFIX for col in target_index_column_collection]
446
468
 
447
469
  source_query = data_validation_api.generate_row_md5_select_query(
448
470
  table_context=source_table_context,
@@ -471,8 +493,8 @@ class SyncValidationExecutor(BaseValidationExecutor):
471
493
  executor.shutdown(wait=False, cancel_futures=True)
472
494
  raise
473
495
 
474
- source_md5_df = source_rows_result.dataframe.convert_dtypes().rename(columns=lambda x: x.upper() + SOURCE_SUFFIX)
475
- target_md5_df = target_rows_result.dataframe.convert_dtypes().rename(columns=lambda x: x.upper() + TARGET_SUFFIX)
496
+ source_md5_df = _suffix_row_result(source_rows_result.dataframe, SOURCE_SUFFIX, source_table_context)
497
+ target_md5_df = _suffix_row_result(target_rows_result.dataframe, TARGET_SUFFIX, target_table_context)
476
498
 
477
499
  # SQLite has no native MD5: the row-md5-select query returns CONCAT_TEXT
478
500
  # instead of ROW_MD5. Compute hashlib MD5 here so the comparison columns match.
@@ -486,12 +508,18 @@ class SyncValidationExecutor(BaseValidationExecutor):
486
508
  source_transformed = QueryExecutionResult(dataframe=source_md5_df)
487
509
  target_transformed = QueryExecutionResult(dataframe=target_md5_df)
488
510
 
511
+ excluded_column_names: list[str] = []
512
+ for side_context in (source_table_context, target_table_context):
513
+ if side_context.is_exclusion_mode and side_context.column_selection_list is not None:
514
+ excluded_column_names.extend(side_context.column_selection_list)
515
+
489
516
  rows_comparison_result = data_validation_api.compare_md5_rows_chunk(
490
517
  source_rows_result=source_transformed,
491
518
  target_rows_result=target_transformed,
492
519
  source_index_column_suffix_collection=source_index_column_suffix_collection,
493
520
  target_index_column_suffix_collection=target_index_column_suffix_collection,
494
521
  table_context=source_table_context,
522
+ excluded_column_names=excluded_column_names,
495
523
  )
496
524
 
497
525
  rows_compared_df = rows_comparison_result.results_dataframe
@@ -499,6 +527,16 @@ class SyncValidationExecutor(BaseValidationExecutor):
499
527
  has_differences = len(rows_compared_df) > 0
500
528
 
501
529
  if has_differences:
530
+ source_generator = self.source_extractor.query_generator
531
+ target_generator = self.target_extractor.query_generator
532
+ source_side = RowReportSide(
533
+ escape_literal=source_generator.escape_string_literal,
534
+ platform=source_generator.platform,
535
+ )
536
+ target_side = RowReportSide(
537
+ escape_literal=target_generator.escape_string_literal,
538
+ platform=target_generator.platform,
539
+ )
502
540
  data_validator = RowDataValidator()
503
541
  data_validator.generate_row_validation_report(
504
542
  compared_df=rows_compared_df,
@@ -512,6 +550,8 @@ class SyncValidationExecutor(BaseValidationExecutor):
512
550
  context=self.context,
513
551
  db_manager=self.db_manager,
514
552
  object_type=source_table_context.object_type,
553
+ source_side=source_side,
554
+ target_side=target_side,
515
555
  )
516
556
 
517
557
  data_validator.generate_row_validation_queries(
@@ -522,6 +562,8 @@ class SyncValidationExecutor(BaseValidationExecutor):
522
562
  target_index_column_collection=target_index_column_collection,
523
563
  object_id=source_table_context.id,
524
564
  context=self.context,
565
+ source_side=source_side,
566
+ target_side=target_side,
525
567
  )
526
568
 
527
569
  self._register_row_validation_execution_status(