snowflake-data-validation 1.35.2__tar.gz → 1.37.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 (617) hide show
  1. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/PKG-INFO +29 -6
  2. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/README.md +23 -0
  3. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/pyproject.toml +4 -6
  4. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +8 -8
  5. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +12 -5
  6. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +1 -0
  7. snowflake_data_validation-1.37.0/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +2 -0
  8. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +6 -2
  9. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +14 -1
  10. snowflake_data_validation-1.37.0/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +2 -0
  11. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +1 -1
  12. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +9 -0
  13. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +14 -1
  14. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +3 -3
  15. snowflake_data_validation-1.37.0/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +25 -0
  16. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +7 -2
  17. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +12 -0
  18. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +30 -0
  19. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +5 -0
  20. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +1 -0
  21. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +1 -0
  22. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +92 -5
  23. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +1 -0
  24. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +1 -0
  25. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +12 -0
  26. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +4 -1
  27. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +301 -0
  28. snowflake_data_validation-1.37.0/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +94 -0
  29. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +2 -2
  30. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +9 -0
  31. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +1 -1
  32. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +58 -1
  33. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +6 -6
  34. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +1 -0
  35. snowflake_data_validation-1.37.0/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +2 -0
  36. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +6 -2
  37. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +10 -0
  38. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/constants.py +38 -2
  39. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +13 -0
  40. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/interval_common.py +26 -3
  41. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +8 -2
  42. snowflake_data_validation-1.37.0/src/snowflake/snowflake_data_validation/utils/measure_collation.py +63 -0
  43. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +2 -1
  44. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +21 -21
  45. snowflake_data_validation-1.37.0/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +76 -0
  46. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +28 -1
  47. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +9 -9
  48. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +51 -0
  49. snowflake_data_validation-1.37.0/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +83 -0
  50. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/Redshift/query/test_query_generator_redshift.py +297 -5
  51. snowflake_data_validation-1.37.0/tests/unit/Redshift/test_redshift_super_normalization.py +103 -0
  52. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +1 -1
  53. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +3 -3
  54. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +62 -4
  55. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/oracle/test_oracle_query_generator.py +47 -0
  56. snowflake_data_validation-1.37.0/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +63 -0
  57. snowflake_data_validation-1.37.0/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +98 -0
  58. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_cell_data_validator.py +104 -0
  59. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_data_validator.py +71 -0
  60. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_interval_common.py +37 -0
  61. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_iso_dv_common.py +14 -0
  62. snowflake_data_validation-1.37.0/tests/unit/test_l2_collation_metadata.py +119 -0
  63. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_metrics_templates_casts.py +43 -0
  64. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_query_generator_numeric_scale.py +96 -4
  65. snowflake_data_validation-1.37.0/tests/unit/test_row_count_bigint_overflow.py +214 -0
  66. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_row_partitioning_strategy.py +3 -1
  67. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_signature_external_table.py +1 -1
  68. snowflake_data_validation-1.37.0/tests/unit/test_snowflake_redshift_super_size_guard.py +197 -0
  69. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_table_column_metadata_model.py +14 -12
  70. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_timestamp_golden_vectors.py +6 -3
  71. snowflake_data_validation-1.37.0/tests/unit/utils/test_semi_structured_json_canonicalization.py +88 -0
  72. snowflake_data_validation-1.35.2/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -2
  73. snowflake_data_validation-1.35.2/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -2
  74. snowflake_data_validation-1.35.2/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -2
  75. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/.gitignore +0 -0
  76. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/LICENSE +0 -0
  77. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/docs/README.md +0 -0
  78. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
  79. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
  80. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
  81. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
  82. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
  83. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
  84. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
  85. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
  86. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
  87. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
  88. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
  89. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
  90. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
  91. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
  92. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
  93. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
  94. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
  95. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
  96. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +0 -0
  97. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +0 -0
  98. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +0 -0
  99. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +0 -0
  100. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
  101. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +0 -0
  102. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +0 -0
  103. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
  104. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
  105. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +0 -0
  106. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
  107. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
  108. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
  109. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
  110. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
  111. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
  112. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
  113. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
  114. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
  115. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
  116. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
  117. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
  118. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
  119. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
  120. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
  121. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
  122. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
  123. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
  124. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
  125. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +0 -0
  126. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +0 -0
  127. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +0 -0
  128. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
  129. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
  130. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
  131. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +0 -0
  132. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
  133. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
  134. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
  135. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
  136. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
  137. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
  138. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
  139. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
  140. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
  141. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
  142. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
  143. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
  144. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
  145. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
  146. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
  147. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
  148. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
  149. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
  150. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
  151. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +0 -0
  152. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
  153. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
  154. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
  155. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
  156. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
  157. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
  158. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
  159. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
  160. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
  161. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
  162. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
  163. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
  164. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
  165. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
  166. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
  167. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
  168. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
  169. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
  170. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
  171. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
  172. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
  173. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
  174. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
  175. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
  176. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
  177. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
  178. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
  179. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
  180. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
  181. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
  182. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
  183. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
  184. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
  185. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
  186. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
  187. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
  188. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
  189. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
  190. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
  191. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
  192. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
  193. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
  194. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
  195. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
  196. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
  197. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
  198. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
  199. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
  200. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
  201. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
  202. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
  203. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
  204. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
  205. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
  206. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
  207. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
  208. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
  209. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
  210. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
  211. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
  212. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
  213. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
  214. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
  215. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
  216. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
  217. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
  218. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
  219. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
  220. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
  221. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
  222. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
  223. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
  224. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
  225. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
  226. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
  227. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
  228. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
  229. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
  230. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
  231. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
  232. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
  233. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
  234. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
  235. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
  236. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
  237. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
  238. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +0 -0
  239. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
  240. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
  241. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
  242. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
  243. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
  244. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
  245. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
  246. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
  247. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
  248. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
  249. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
  250. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
  251. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
  252. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
  253. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
  254. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -0
  255. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
  256. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
  257. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
  258. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
  259. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
  260. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
  261. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
  262. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
  263. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
  264. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
  265. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
  266. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
  267. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
  268. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
  269. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
  270. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
  271. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
  272. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
  273. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
  274. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
  275. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
  276. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
  277. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
  278. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
  279. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
  280. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
  281. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
  282. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
  283. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
  284. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
  285. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
  286. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
  287. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +0 -0
  288. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
  289. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
  290. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
  291. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
  292. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
  293. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
  294. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
  295. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
  296. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
  297. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
  298. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
  299. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
  300. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
  301. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
  302. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
  303. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
  304. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
  305. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
  306. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
  307. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
  308. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
  309. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
  310. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
  311. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
  312. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -0
  313. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
  314. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
  315. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
  316. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
  317. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
  318. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
  319. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
  320. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
  321. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
  322. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
  323. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
  324. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
  325. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
  326. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
  327. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
  328. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
  329. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
  330. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
  331. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
  332. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
  333. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
  334. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
  335. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
  336. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
  337. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
  338. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
  339. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
  340. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
  341. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
  342. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
  343. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
  344. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
  345. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
  346. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
  347. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
  348. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
  349. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
  350. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
  351. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
  352. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
  353. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
  354. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +0 -0
  355. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
  356. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
  357. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
  358. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
  359. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +0 -0
  360. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
  361. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
  362. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
  363. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
  364. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
  365. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +0 -0
  366. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
  367. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
  368. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
  369. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +0 -0
  370. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
  371. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
  372. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
  373. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
  374. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
  375. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
  376. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
  377. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
  378. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
  379. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
  380. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
  381. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
  382. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
  383. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
  384. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
  385. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
  386. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
  387. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
  388. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
  389. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
  390. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
  391. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +0 -0
  392. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
  393. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
  394. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
  395. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
  396. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
  397. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
  398. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +0 -0
  399. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
  400. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
  401. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +0 -0
  402. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
  403. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
  404. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
  405. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
  406. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
  407. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +0 -0
  408. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
  409. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
  410. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
  411. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
  412. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
  413. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
  414. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
  415. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
  416. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
  417. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
  418. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
  419. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
  420. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
  421. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
  422. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
  423. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
  424. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
  425. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
  426. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
  427. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
  428. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
  429. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
  430. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
  431. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
  432. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
  433. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
  434. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
  435. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
  436. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
  437. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
  438. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
  439. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/.coveragerc +0 -0
  440. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/conftest.py +0 -0
  441. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/integration/.coveragerc +0 -0
  442. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
  443. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/integration/test_async_generation_integration.py +0 -0
  444. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/integration/test_async_validation_integration.py +0 -0
  445. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/integration/test_reference_integration.py +0 -0
  446. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/integration/test_source_validation_integration.py +0 -0
  447. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/integration/test_sync_validation_integration.py +0 -0
  448. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
  449. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
  450. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
  451. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/Redshift/test_connector_redshift.py +0 -0
  452. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
  453. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
  454. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
  455. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
  456. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/Teradata/test_connector_teradata.py +0 -0
  457. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
  458. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
  459. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
  460. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
  461. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
  462. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
  463. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/__init__.py +0 -0
  464. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
  465. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
  466. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
  467. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
  468. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
  469. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
  470. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
  471. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
  472. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
  473. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
  474. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
  475. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
  476. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
  477. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
  478. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
  479. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/azure_synapse/__init__.py +0 -0
  480. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
  481. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
  482. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
  483. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
  484. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/bigquery/__init__.py +0 -0
  485. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
  486. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/bigquery/test_query_generator_bigquery.py +0 -0
  487. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
  488. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/db2/__init__.py +0 -0
  489. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
  490. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/db2/test_db2_query_generator.py +0 -0
  491. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/db2/test_db2_registration.py +0 -0
  492. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/oracle/__init__.py +0 -0
  493. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -0
  494. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
  495. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
  496. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
  497. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
  498. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
  499. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
  500. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
  501. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
  502. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
  503. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
  504. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/sqlite/__init__.py +0 -0
  505. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
  506. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
  507. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
  508. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +0 -0
  509. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
  510. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
  511. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/sqlserver/__init__.py +0 -0
  512. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
  513. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
  514. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/sqlserver/test_sqlserver_row_queries.py +0 -0
  515. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
  516. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
  517. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_accepted_transformation.py +0 -0
  518. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_arguments_manager_base.py +0 -0
  519. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_arguments_manager_factory.py +0 -0
  520. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_batched_metrics_queries.py +0 -0
  521. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
  522. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_cell_validation_query_generation.py +0 -0
  523. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_charset_normalization.py +0 -0
  524. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_column_grouping.py +0 -0
  525. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_column_metadata.py +0 -0
  526. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_column_normalization_override.py +0 -0
  527. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_column_partitioning_strategy.py +0 -0
  528. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_comparison_codec.py +0 -0
  529. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_comparison_orchestrator.py +0 -0
  530. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_configuration_file_editor.py +0 -0
  531. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_configuration_file_generator.py +0 -0
  532. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_configuration_file_synchronizer.py +0 -0
  533. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_configuration_loader.py +0 -0
  534. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_configuration_model.py +0 -0
  535. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_connection_pool.py +0 -0
  536. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_connector_failure_tracker.py +0 -0
  537. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_connector_snowflake.py +0 -0
  538. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_cpu_optimizer.py +0 -0
  539. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_custom_templates_models.py +0 -0
  540. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_escape_odbc_value.py +0 -0
  541. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_executor_factory.py +0 -0
  542. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_float_bit_canonical.py +0 -0
  543. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_float_canonical_templates.py +0 -0
  544. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_get_configuration_file.py +0 -0
  545. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_get_target_cols.py +0 -0
  546. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_helper_dataframe.py +0 -0
  547. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_helper_polars_cast.py +0 -0
  548. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_helpers.py +0 -0
  549. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_html_report_builder.py +0 -0
  550. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_iceberg_dv_l3_normalization.py +0 -0
  551. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_index_key_format.py +0 -0
  552. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_internal_helpers.py +0 -0
  553. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_logging_config.py +0 -0
  554. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_metrics_reshape.py +0 -0
  555. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_metrics_result_shape.py +0 -0
  556. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_metrics_tolerance.py +0 -0
  557. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_normalize_shape_aware.py +0 -0
  558. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_numeric_scale_resolution.py +0 -0
  559. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_platform_bridge.py +0 -0
  560. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_postgresql_normalization_templates.py +0 -0
  561. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_postgresql_tz_normalization.py +0 -0
  562. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_pushdown_diff_sql.py +0 -0
  563. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_query_cell_level_validation.py +0 -0
  564. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_query_metrics_level_validation.py +0 -0
  565. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_query_to_dataframe.py +0 -0
  566. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_query_validator.py +0 -0
  567. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_qvci_fallback.py +0 -0
  568. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
  569. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_qvci_fallback_triggers.py +0 -0
  570. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_report_metadata.py +0 -0
  571. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_result_set_cell_level_validation.py +0 -0
  572. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
  573. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_result_set_snapshot_generation.py +0 -0
  574. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_result_set_snapshot_validation.py +0 -0
  575. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_result_set_to_dataframe.py +0 -0
  576. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_result_set_validator.py +0 -0
  577. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_row_data_validator.py +0 -0
  578. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_row_hash_column_delimiter.py +0 -0
  579. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_row_validation_report_buffer.py +0 -0
  580. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_shutdown_coordinator.py +0 -0
  581. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_signature_row_md5_query.py +0 -0
  582. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_snapshot_validation_statements.py +0 -0
  583. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_snowflake_arguments_manager.py +0 -0
  584. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
  585. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_source_validation_executor.py +0 -0
  586. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
  587. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_sql_catalog_template_guard.py +0 -0
  588. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_sql_literal_jinja_filter.py +0 -0
  589. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_sqlite_validation_connection.py +0 -0
  590. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
  591. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
  592. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_sync_executor_qvci_fallback.py +0 -0
  593. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_sync_validation_executor.py +0 -0
  594. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_table_configuration.py +0 -0
  595. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_table_context.py +0 -0
  596. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_table_metadata_processor.py +0 -0
  597. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_table_snapshot_generation.py +0 -0
  598. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_table_snapshot_validation.py +0 -0
  599. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_target_platform_factory.py +0 -0
  600. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_telemetry.py +0 -0
  601. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_templates_loader_manager.py +0 -0
  602. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_teradata_iso_normalization.py +0 -0
  603. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_teradata_string_rtrim_policy.py +0 -0
  604. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_validation_configuration.py +0 -0
  605. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_validation_database_connection.py +0 -0
  606. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_validation_execution_context.py +0 -0
  607. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_validation_progress_reporter.py +0 -0
  608. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_validation_report_buffer.py +0 -0
  609. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_validation_report_status.py +0 -0
  610. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_validation_templates_dto.py +0 -0
  611. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_vector_bit_normalization.py +0 -0
  612. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_vector_common.py +0 -0
  613. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_vector_normalization.py +0 -0
  614. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_view_configuration.py +0 -0
  615. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/test_warm_start.py +0 -0
  616. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/utils/__init__.py +0 -0
  617. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.37.0}/tests/unit/utils/test_constants.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: snowflake-data-validation
3
- Version: 1.35.2
3
+ Version: 1.37.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/
@@ -28,7 +28,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
28
28
  Requires-Python: >=3.10
29
29
  Requires-Dist: beartype>=0.18.0
30
30
  Requires-Dist: connectorx>=0.3.0
31
- Requires-Dist: cryptography<50,>=3.4.0
31
+ Requires-Dist: cryptography>=50.0.0
32
32
  Requires-Dist: deepdiff>=8.0.0
33
33
  Requires-Dist: jinja2>=3.1.6
34
34
  Requires-Dist: pandas>=2.2.3
@@ -38,11 +38,11 @@ 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>=4.0.0
41
+ Requires-Dist: snowflake-connector-python>=4.7.1
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
45
- Requires-Dist: urllib3>=2.6.0
45
+ Requires-Dist: urllib3>=2.7.0
46
46
  Provides-Extra: all
47
47
  Requires-Dist: azure-identity>=1.15.0; extra == 'all'
48
48
  Requires-Dist: coverage>=7.6.7; extra == 'all'
@@ -55,7 +55,7 @@ Requires-Dist: pyodbc>=5.2.0; extra == 'all'
55
55
  Requires-Dist: pytest-cov>=6.0.0; extra == 'all'
56
56
  Requires-Dist: pytest-mock>=3.14.1; extra == 'all'
57
57
  Requires-Dist: pytest>=8.3.3; extra == 'all'
58
- Requires-Dist: redshift-connector>=2.1.8; extra == 'all'
58
+ Requires-Dist: redshift-connector>=2.1.14; extra == 'all'
59
59
  Requires-Dist: setuptools>=70.0.0; extra == 'all'
60
60
  Requires-Dist: sqlean-py>=3.45.0; extra == 'all'
61
61
  Requires-Dist: teradatasql>=17.20.0.0; extra == 'all'
@@ -77,7 +77,7 @@ Requires-Dist: twine==6.0.1; extra == 'development'
77
77
  Provides-Extra: postgresql
78
78
  Requires-Dist: psycopg[binary]>=3.2.0; extra == 'postgresql'
79
79
  Provides-Extra: redshift
80
- Requires-Dist: redshift-connector>=2.1.8; extra == 'redshift'
80
+ Requires-Dist: redshift-connector>=2.1.14; extra == 'redshift'
81
81
  Provides-Extra: sqlite
82
82
  Requires-Dist: sqlean-py>=3.45.0; extra == 'sqlite'
83
83
  Provides-Extra: sqlserver
@@ -188,6 +188,29 @@ For configuration options and examples, see the [official documentation](https:/
188
188
 
189
189
  ## Changelog
190
190
 
191
+ ### v1.37.0
192
+
193
+ **New features**
194
+
195
+ - Added cloud-direct L3 signature copy-extract execution for Teradata `WRITE_NOS`, Oracle `DBMS_CLOUD`, Synapse `CETAS`, and BigQuery `EXPORT DATA`.
196
+
197
+ ### v1.36.0
198
+
199
+ **New features**
200
+
201
+ - Added Oracle `BFILE` locator migration support.
202
+
203
+ **Improvements**
204
+
205
+ - Improved SQL Server L1 validation by binding source catalogs and qualifying object references.
206
+
207
+ **Bug fixes**
208
+
209
+ - Fixed Redshift `SUPER` columns being read as `NULL` by the validator.
210
+ - Fixed parameterized numeric type matching against bare normalization keys.
211
+ - Fixed Snowflake `TO_CHAR` mask overflow by clamping to the 38-digit budget.
212
+ - Fixed mixed-interval column binding in Jinja templates before `pyodbc` evaluation.
213
+
191
214
  ### v1.35.2
192
215
 
193
216
  **New features**
@@ -99,6 +99,29 @@ For configuration options and examples, see the [official documentation](https:/
99
99
 
100
100
  ## Changelog
101
101
 
102
+ ### v1.37.0
103
+
104
+ **New features**
105
+
106
+ - Added cloud-direct L3 signature copy-extract execution for Teradata `WRITE_NOS`, Oracle `DBMS_CLOUD`, Synapse `CETAS`, and BigQuery `EXPORT DATA`.
107
+
108
+ ### v1.36.0
109
+
110
+ **New features**
111
+
112
+ - Added Oracle `BFILE` locator migration support.
113
+
114
+ **Improvements**
115
+
116
+ - Improved SQL Server L1 validation by binding source catalogs and qualifying object references.
117
+
118
+ **Bug fixes**
119
+
120
+ - Fixed Redshift `SUPER` columns being read as `NULL` by the validator.
121
+ - Fixed parameterized numeric type matching against bare normalization keys.
122
+ - Fixed Snowflake `TO_CHAR` mask overflow by clamping to the 38-digit budget.
123
+ - Fixed mixed-interval column binding in Jinja templates before `pyodbc` evaluation.
124
+
102
125
  ### v1.35.2
103
126
 
104
127
  **New features**
@@ -28,11 +28,9 @@ classifiers = [
28
28
  dependencies = [
29
29
  "beartype>=0.18.0",
30
30
  "connectorx>=0.3.0",
31
- # Cap <50: cryptography 50 drops symbols still required by pyOpenSSL<26
32
- # (resolved with snowflake-connector-python 4.0.x); no pyOpenSSL supports 50 yet.
33
- "cryptography>=3.4.0,<50",
31
+ "cryptography>=50.0.0",
34
32
  "deepdiff>=8.0.0",
35
- "snowflake-connector-python>=4.0.0",
33
+ "snowflake-connector-python>=4.7.1",
36
34
  "pandas>=2.2.3",
37
35
  "polars>=1.0.0",
38
36
  "pyarrow>=14.0.0",
@@ -44,7 +42,7 @@ dependencies = [
44
42
  "pydantic-yaml>=1.4.0",
45
43
  "typing-extensions>=4.13.2",
46
44
  "typer>=0.15.3",
47
- "urllib3>=2.6.0",
45
+ "urllib3>=2.7.0",
48
46
  ]
49
47
  description = "Snowflake Data Validation"
50
48
  dynamic = ['version']
@@ -86,7 +84,7 @@ sqlite = [
86
84
  "sqlean.py>=3.45.0",
87
85
  ]
88
86
  redshift = [
89
- "redshift-connector>=2.1.8",
87
+ "redshift-connector>=2.1.14",
90
88
  ]
91
89
  postgresql = [
92
90
  "psycopg[binary]>=3.2.0",
@@ -326,7 +326,7 @@ CHAR:
326
326
  metric_query: SUM(CASE WHEN DATALENGTH(RTRIM("{{ col_name }}")) = 0 THEN 1 ELSE 0 END)
327
327
  metric_return_datatype: INT
328
328
  count_distinct:
329
- metric_query: COUNT(DISTINCT RTRIM("{{ col_name }}"))
329
+ metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}RTRIM("{{ col_name }}"){{ measure_collation_suffix }})
330
330
  metric_return_datatype: INT
331
331
  count_null:
332
332
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
@@ -350,7 +350,7 @@ VARCHAR:
350
350
  metric_query: SUM(CASE WHEN DATALENGTH("{{ col_name }}") = 0 THEN 1 ELSE 0 END)
351
351
  metric_return_datatype: INT
352
352
  count_distinct:
353
- metric_query: COUNT(DISTINCT CAST('|' + "{{ col_name }}" + '|' AS VARCHAR(MAX)))
353
+ metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}CAST('|' + "{{ col_name }}" + '|' AS VARCHAR(MAX)){{ measure_collation_suffix }})
354
354
  metric_return_datatype: INT
355
355
  count_null:
356
356
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
@@ -370,7 +370,7 @@ NCHAR:
370
370
  metric_query: SUM(CASE WHEN RTRIM("{{ col_name }}") = '' THEN 1 ELSE 0 END)
371
371
  metric_return_datatype: INT
372
372
  count_distinct:
373
- metric_query: COUNT(DISTINCT RTRIM("{{ col_name }}"))
373
+ metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}RTRIM("{{ col_name }}"){{ measure_collation_suffix }})
374
374
  metric_return_datatype: INT
375
375
  count_null:
376
376
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
@@ -390,7 +390,7 @@ NVARCHAR:
390
390
  metric_query: SUM(CASE WHEN "{{ col_name }}" = '' THEN 1 ELSE 0 END)
391
391
  metric_return_datatype: INT
392
392
  count_distinct:
393
- metric_query: COUNT(DISTINCT CAST('|' + "{{ col_name }}" + '|' AS VARCHAR(MAX)))
393
+ metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}CAST(N'|' + CAST("{{ col_name }}" AS NVARCHAR(MAX)) + N'|' AS NVARCHAR(MAX)){{ measure_collation_suffix }})
394
394
  metric_return_datatype: INT
395
395
  count_null:
396
396
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
@@ -437,11 +437,11 @@ DATETIME2:
437
437
  min:
438
438
  metric_query: MIN("{{ col_name }}")
439
439
  metric_return_datatype: DATETIME2
440
- metric_normalization: FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00'
440
+ metric_normalization: LEFT(FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000'
441
441
  max:
442
442
  metric_query: MAX("{{ col_name }}")
443
443
  metric_return_datatype: DATETIME2
444
- metric_normalization: FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00'
444
+ metric_normalization: LEFT(FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000'
445
445
  count_null:
446
446
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
447
447
  metric_return_datatype: INT
@@ -463,11 +463,11 @@ DATETIMEOFFSET:
463
463
  min:
464
464
  metric_query: MIN("{{ col_name }}")
465
465
  metric_return_datatype: DATETIMEOFFSET
466
- metric_normalization: FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00' + FORMAT({{ metric_query }}, 'zzz')
466
+ metric_normalization: LEFT(FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000' + FORMAT({{ metric_query }}, 'zzz')
467
467
  max:
468
468
  metric_query: MAX("{{ col_name }}")
469
469
  metric_return_datatype: DATETIMEOFFSET
470
- metric_normalization: FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00' + FORMAT({{ metric_query }}, 'zzz')
470
+ metric_normalization: LEFT(FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000' + FORMAT({{ metric_query }}, 'zzz')
471
471
  count_null:
472
472
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
473
473
  metric_return_datatype: INT
@@ -31,22 +31,29 @@ NCHAR: RTRIM("{{ col_name }}")
31
31
  NVARCHAR: '"{{ col_name }}"'
32
32
 
33
33
  # ---- Date / Time types ----
34
- # Append '00' to FORMAT('.fffffff') so the output reaches FF9 (Snowflake TIMESTAMP_NTZ format).
35
- # Use '+' (not CONCAT) so a NULL input propagates to NULL — CONCAT would coerce NULL to ''.
34
+ # DATETIME keeps 7 fractional digits + '00' pad to FF9.
35
+ # DATETIME2 / DATETIMEOFFSET: Snowflake TIMESTAMP_* stores microseconds. FORMAT
36
+ # '.fffffff' keeps the 7th digit (e.g. .999999900) while Snowflake TO_CHAR FF9
37
+ # emits .999999000 for the truncated mirror. Truncate to 6 fractional digits
38
+ # then pad '000' so hashes match ODBC/microsecond storage. LEFT keeps NULL.
39
+ # Use '+' (not CONCAT) so a NULL input propagates to NULL.
36
40
  # FORMAT(..., 'zzz') reliably emits '+HH:MM'/'-HH:MM' for every offset, including UTC.
37
41
  DATE: FORMAT("{{ col_name }}", 'yyyy-MM-dd')
38
42
  TIME: CONVERT(VARCHAR(8), "{{ col_name }}", 108)
39
43
  DATETIME: FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00'
40
- DATETIME2: FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00'
44
+ DATETIME2: LEFT(FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000'
41
45
  SMALLDATETIME: FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.000000000')
42
- DATETIMEOFFSET: FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00' + FORMAT("{{ col_name }}", 'zzz')
46
+ DATETIMEOFFSET: LEFT(FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000' + FORMAT("{{ col_name }}", 'zzz')
43
47
 
44
48
  # ---- Binary types ----
45
49
  BINARY: UPPER(CONVERT(VARCHAR(MAX), "{{ col_name }}", 2))
46
50
  VARBINARY: UPPER(CONVERT(VARCHAR(MAX), "{{ col_name }}", 2))
47
51
 
48
52
  # ---- Other types ----
49
- UNIQUEIDENTIFIER: LOWER(CONVERT(VARCHAR(36), "{{ col_name }}"))
53
+ # Azure Synapse dedicated SQL pool always normalizes UNIQUEIDENTIFIER hex digits
54
+ # to uppercase regardless of input casing. Use UPPER so the canonical string
55
+ # matches the DV cases and Snowflake's VARCHAR-based representation.
56
+ UNIQUEIDENTIFIER: UPPER(CONVERT(VARCHAR(36), "{{ col_name }}"))
50
57
  SYSNAME: CONVERT(VARCHAR(128), "{{ col_name }}")
51
58
 
52
59
  # ---- Default fallback ----
@@ -31,6 +31,7 @@ SELECT
31
31
  END AS character_length,
32
32
  CASE WHEN c.precision = 0 THEN NULL ELSE c.precision END AS precision,
33
33
  CASE WHEN c.precision = 0 THEN NULL ELSE c.scale END AS scale,
34
+ c.collation_name AS collation_name,
34
35
  CASE
35
36
  WHEN t.name IN ('decimal', 'numeric')
36
37
  THEN
@@ -0,0 +1,2 @@
1
+ {% import 'query_modifiers.sql.j2' as qm with context %}
2
+ {{ qm.locking_prefix(query_modifiers) }}SELECT COUNT_BIG(*) AS ROW_COUNT {{ qm.render_from_clause(query_modifiers, fully_qualified_name) }}{% if has_where_clause %} WHERE {{ where_clause }}{% endif %}
@@ -1,7 +1,7 @@
1
1
  {% import 'query_modifiers.sql.j2' as qm with context %}
2
2
  {{ qm.locking_prefix(query_modifiers) }}
3
3
  WITH rc_cte AS (
4
- SELECT COUNT(*) AS ROW_COUNT {{ qm.render_from_clause(query_modifiers, fully_qualified_name) }} {% if has_where_clause %} WHERE {{ where_clause }} {% endif %}
4
+ SELECT COUNT_BIG(*) AS ROW_COUNT {{ qm.render_from_clause(query_modifiers, fully_qualified_name) }} {% if has_where_clause %} WHERE {{ where_clause }} {% endif %}
5
5
  )
6
6
  SELECT
7
7
  C.COLUMN_NAME AS COLUMN_VALIDATED,
@@ -15,12 +15,16 @@ WITH rc_cte AS (
15
15
  END AS CHARACTER_MAXIMUM_LENGTH,
16
16
  C.NUMERIC_PRECISION AS NUMERIC_PRECISION,
17
17
  C.NUMERIC_SCALE AS NUMERIC_SCALE,
18
+ C.COLLATION_NAME AS COLLATION_NAME,
18
19
  C.IS_NULLABLE AS IS_NULLABLE,
19
20
  rc.ROW_COUNT
20
- FROM INFORMATION_SCHEMA.COLUMNS C
21
+ FROM {% if object_database_ref %}{{ object_database_ref }}.{% endif %}INFORMATION_SCHEMA.COLUMNS C
21
22
  CROSS JOIN rc_cte rc
22
23
  WHERE C.TABLE_NAME = '{{ object_name | escape_sql_literal }}'
23
24
  AND C.TABLE_SCHEMA = '{{ object_schema | escape_sql_literal }}'
25
+ {% if object_database %}
26
+ AND C.TABLE_CATALOG = '{{ object_database | escape_sql_literal }}'
27
+ {% endif %}
24
28
  {% if columns %}
25
29
  AND C.COLUMN_NAME IN (
26
30
  {% for column in columns %}
@@ -67,6 +67,16 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
67
67
  """Initialize the Azure Synapse query generator."""
68
68
  super().__init__(platform=Platform.AZURE_SYNAPSE)
69
69
 
70
+ def _measure_collation_tokens(self, column, metric_name: str) -> tuple[str, str]:
71
+ character_types = {"CHAR", "NCHAR", "VARCHAR", "NVARCHAR"}
72
+ if (
73
+ metric_name == "count_distinct"
74
+ and self._base_data_type(column) in character_types
75
+ and self._has_source_collation_metadata(column)
76
+ ):
77
+ return "", " COLLATE Latin1_General_BIN2"
78
+ return "", ""
79
+
70
80
  def _float_column_reference(self, column) -> str:
71
81
  return f'"{column.name}"'
72
82
 
@@ -96,7 +106,10 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
96
106
  rendered: dict[str, str] = {}
97
107
  for column in table_context.columns_to_validate:
98
108
  lookup_key = (column.data_type or "").strip().upper()
99
- normalization_template = datatypes_normalization_templates.get(lookup_key)
109
+ normalization_template = self._lookup_normalization_template(
110
+ datatypes_normalization_templates,
111
+ lookup_key,
112
+ )
100
113
  if normalization_template is None:
101
114
  LOGGER.debug(
102
115
  "No normalization template for data type %s, using DEFAULT.",
@@ -0,0 +1,2 @@
1
+ {% import 'query_modifiers.sql.j2' as qm with context %}
2
+ {{ qm.locking_prefix(query_modifiers) }}SELECT COUNT_BIG(*) AS ROW_COUNT {{ qm.render_from_clause(query_modifiers, fully_qualified_name) }}{% if has_where_clause %} WHERE {{ where_clause }}{% endif %}
@@ -5,7 +5,7 @@
5
5
  -- carries per-column type, length, scale, nullability and PK ordinal (KEYSEQ).
6
6
  -- COLNO is 0-based, so ORDINAL_POSITION = COLNO + 1.
7
7
  WITH rc_cte AS (
8
- SELECT COUNT(*) AS ROW_COUNT {{ qm.render_from_clause(query_modifiers, fully_qualified_name) }}{% if has_where_clause %} WHERE {{ where_clause }}{% endif %}
8
+ SELECT COUNT_BIG(*) AS ROW_COUNT {{ qm.render_from_clause(query_modifiers, fully_qualified_name) }}{% if has_where_clause %} WHERE {{ where_clause }}{% endif %}
9
9
  )
10
10
  SELECT
11
11
  C.COLNAME AS COLUMN_VALIDATED,
@@ -37,6 +37,9 @@ from snowflake.snowflake_data_validation.utils.context import Context
37
37
  from snowflake.snowflake_data_validation.utils.iso_dv_common import (
38
38
  attach_paired_column_types_for_iso_timestamp_dv,
39
39
  )
40
+ from snowflake.snowflake_data_validation.utils.measure_collation import (
41
+ mark_target_columns_for_normalized_measure_collation,
42
+ )
40
43
  from snowflake.snowflake_data_validation.utils.model.table_column_metadata import (
41
44
  TableColumnMetadata,
42
45
  )
@@ -122,6 +125,12 @@ class BaseValidationExecutor(ABC):
122
125
  )
123
126
 
124
127
  if validations[METRICS_VALIDATION_KEY]:
128
+ target_table_context.columns = mark_target_columns_for_normalized_measure_collation(
129
+ source_table_context.platform,
130
+ source_table_context.columns,
131
+ target_table_context.columns,
132
+ table_configuration.column_mappings,
133
+ )
125
134
  self.execute_metrics_validation(
126
135
  source_table_context=source_table_context,
127
136
  target_table_context=target_table_context,
@@ -146,11 +146,16 @@ class SQLQueriesTemplateGenerator:
146
146
  query_modifiers=query_modifiers or QueryModifiersTemplateContext.empty(),
147
147
  object_type=object_type_str,
148
148
  is_view=object_type_str == "VIEW",
149
+ object_database_ref="",
149
150
  )
150
151
  if platform == Platform.SNOWFLAKE.value:
151
152
  from snowflake.snowflake_data_validation.utils.helpers.helper_database import HelperDatabase
152
153
 
153
154
  render_kwargs["object_database_ref"] = HelperDatabase.snowflake_identifier_ref(database_name)
155
+ elif platform in (Platform.SQLSERVER.value, Platform.AZURE_SYNAPSE.value) and database_name:
156
+ from snowflake.snowflake_data_validation.utils.helpers.helper_database import HelperDatabase
157
+
158
+ render_kwargs["object_database_ref"] = HelperDatabase.sqlserver_identifier_ref(database_name)
154
159
  try:
155
160
  return self._render(
156
161
  template_file,
@@ -494,8 +499,15 @@ class SQLQueriesTemplateGenerator:
494
499
  where_clause: str,
495
500
  order_by_columns: list[str] | None,
496
501
  query_modifiers: QueryModifiersTemplateContext | None = None,
502
+ extra_from_joins: list[str] | None = None,
497
503
  ) -> str:
498
- """Render a SELECT that applies the same per-type normalization as L3 MD5."""
504
+ """Render a SELECT that applies the same per-type normalization as L3 MD5.
505
+
506
+ ``extra_from_joins`` (Redshift SUPER sorted-object joins) is an optional
507
+ list of ``LEFT JOIN ...`` fragments appended to the inner FROM clause;
508
+ templates that don't reference it are unaffected (Jinja Undefined is
509
+ falsy in ``{% if %}``).
510
+ """
499
511
  template_file = f"{platform}_cell_validation_data_select.sql.j2"
500
512
  try:
501
513
  return self._render(
@@ -507,6 +519,7 @@ class SQLQueriesTemplateGenerator:
507
519
  where_clause=where_clause,
508
520
  order_by_columns=order_by_columns or [],
509
521
  query_modifiers=query_modifiers or QueryModifiersTemplateContext.empty(),
522
+ extra_from_joins=extra_from_joins or [],
510
523
  )
511
524
  except jinja2.exceptions.TemplateNotFound:
512
525
  raise ValueError(f"Template not found: {template_file}. Please create it in the {self.template_dir} directory.") from None
@@ -51,9 +51,9 @@ RAW: RAWTOHEX({{ col_name }})
51
51
  LONG RAW: RAWTOHEX({{ col_name }})
52
52
  # MD5 the whole BLOB with DBMS_CRYPTO.HASH (see CLOB above). CASE-guarded for NULL.
53
53
  BLOB: CASE WHEN {{ col_name }} IS NULL THEN NULL ELSE RAWTOHEX(DBMS_CRYPTO.HASH({{ col_name }}, 2)) END
54
- # BFILE is an external file locator; DBMS_CRYPTO cannot hash it, so it stays on a
55
- # bounded DBMS_LOB read.
56
- BFILE: RAWTOHEX(DBMS_LOB.SUBSTR({{ col_name }}, 4000, 1))
54
+ # Validate the same DIRECTORY/filename locator text produced by migration.
55
+ # QueryGeneratorOracle adds the statement-local helper that implements this call.
56
+ BFILE: DMVF_BFILE_TO_PATH({{ col_name }})
57
57
 
58
58
  # ---- Row address types ----
59
59
  # ROWID and UROWID are stored as opaque row-address strings; NVL is sufficient.
@@ -0,0 +1,25 @@
1
+ """Shared Oracle ``BFILE`` locator extraction SQL."""
2
+
3
+ ORACLE_BFILE_TO_PATH_FUNCTION_NAME = "DMVF_BFILE_TO_PATH"
4
+ ORACLE_BFILE_EXTRACTION = f"{ORACLE_BFILE_TO_PATH_FUNCTION_NAME}({{col}})"
5
+ ORACLE_BFILE_NORMALIZATION = (
6
+ f"{ORACLE_BFILE_TO_PATH_FUNCTION_NAME}({{{{ col_name }}}})"
7
+ )
8
+ ORACLE_BFILE_WITH_FUNCTION = f"""WITH FUNCTION {ORACLE_BFILE_TO_PATH_FUNCTION_NAME}(value BFILE)
9
+ RETURN VARCHAR2 IS
10
+ directory_name VARCHAR2(128);
11
+ file_name VARCHAR2(4000);
12
+ BEGIN
13
+ IF value IS NULL THEN
14
+ RETURN NULL;
15
+ END IF;
16
+ DBMS_LOB.FILEGETNAME(value, directory_name, file_name);
17
+ RETURN directory_name || '/' || file_name;
18
+ END;
19
+ """
20
+
21
+
22
+ def prepend_oracle_bfile_function(sql: str) -> str:
23
+ """Add the statement-local helper when SQL contains a BFILE path call."""
24
+ marker = f"{ORACLE_BFILE_TO_PATH_FUNCTION_NAME}("
25
+ return ORACLE_BFILE_WITH_FUNCTION + sql if marker in sql else sql
@@ -37,6 +37,9 @@ import pandas as pd
37
37
  from snowflake.snowflake_data_validation.oracle.extractor.metadata_extractor_oracle import (
38
38
  normalize_oracle_type,
39
39
  )
40
+ from snowflake.snowflake_data_validation.oracle.oracle_bfile import (
41
+ prepend_oracle_bfile_function,
42
+ )
40
43
  from snowflake.snowflake_data_validation.oracle.oracle_iso_normalization import (
41
44
  resolve_oracle_timestamp_metric_normalization,
42
45
  resolve_oracle_timestamp_normalization_template,
@@ -253,7 +256,7 @@ class QueryGeneratorOracle(QueryGeneratorBase):
253
256
  if order_by:
254
257
  order_by_columns = [col.name for col in table_context.index_column_collection]
255
258
 
256
- return table_context.sql_generator.generate_row_md5_select_query(
259
+ sql = table_context.sql_generator.generate_row_md5_select_query(
257
260
  platform=self.platform.value,
258
261
  index_column_collection=table_context.index_column_collection,
259
262
  column_names_separate_by_comma=table_context.join_column_names_for_row_hash(),
@@ -265,6 +268,7 @@ class QueryGeneratorOracle(QueryGeneratorBase):
265
268
  column_groups=table_context.column_groups,
266
269
  order_by_columns=order_by_columns,
267
270
  )
271
+ return prepend_oracle_bfile_function(sql)
268
272
 
269
273
  def generate_cell_validation_data_query(
270
274
  self,
@@ -290,7 +294,7 @@ class QueryGeneratorOracle(QueryGeneratorBase):
290
294
  column_normalization_map,
291
295
  )
292
296
 
293
- return table_context.sql_generator.generate_cell_validation_data_select_query(
297
+ sql = table_context.sql_generator.generate_cell_validation_data_select_query(
294
298
  platform=table_context.platform.value,
295
299
  column_collection=table_context.columns_to_validate,
296
300
  datatypes_normalization_renderer_templates=datatypes_normalization_renderer_templates,
@@ -300,6 +304,7 @@ class QueryGeneratorOracle(QueryGeneratorBase):
300
304
  order_by_columns=order_by_columns,
301
305
  query_modifiers=resolve_table_context_modifiers(table_context),
302
306
  )
307
+ return prepend_oracle_bfile_function(sql)
303
308
 
304
309
  def _generate_compute_md5_chunk_query(
305
310
  self,
@@ -528,6 +528,10 @@ BOOL:
528
528
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
529
529
  metric_return_datatype: INTEGER
530
530
 
531
+ # min/max must declare metric_normalization so L2 wraps with the same ISO
532
+ # templates as postgresql_datatypes_normalization_templates.yaml (canonical
533
+ # T-separator + 9 fractional digits). Without it, MIN/MAX return native
534
+ # timestamps and Python str() fails string compare against Snowflake FF9.
531
535
  DATE:
532
536
  min:
533
537
  metric_query: MIN("{{ col_name }}")
@@ -543,9 +547,11 @@ TIMESTAMP:
543
547
  min:
544
548
  metric_query: MIN("{{ col_name }}")
545
549
  metric_return_datatype: TIMESTAMP
550
+ metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.US') || '000'
546
551
  max:
547
552
  metric_query: MAX("{{ col_name }}")
548
553
  metric_return_datatype: TIMESTAMP
554
+ metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.US') || '000'
549
555
  count_null:
550
556
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
551
557
  metric_return_datatype: INTEGER
@@ -554,9 +560,11 @@ TIMESTAMP WITHOUT TIME ZONE:
554
560
  min:
555
561
  metric_query: MIN("{{ col_name }}")
556
562
  metric_return_datatype: TIMESTAMP
563
+ metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.US') || '000'
557
564
  max:
558
565
  metric_query: MAX("{{ col_name }}")
559
566
  metric_return_datatype: TIMESTAMP
567
+ metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.US') || '000'
560
568
  count_null:
561
569
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
562
570
  metric_return_datatype: INTEGER
@@ -565,9 +573,11 @@ TIMESTAMPTZ:
565
573
  min:
566
574
  metric_query: MIN("{{ col_name }}")
567
575
  metric_return_datatype: TIMESTAMP WITH TIME ZONE
576
+ metric_normalization: TO_CHAR({{ metric_query }} AT TIME ZONE 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.US') || '000+00:00'
568
577
  max:
569
578
  metric_query: MAX("{{ col_name }}")
570
579
  metric_return_datatype: TIMESTAMP WITH TIME ZONE
580
+ metric_normalization: TO_CHAR({{ metric_query }} AT TIME ZONE 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.US') || '000+00:00'
571
581
  count_null:
572
582
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
573
583
  metric_return_datatype: INTEGER
@@ -576,9 +586,11 @@ TIMESTAMP WITH TIME ZONE:
576
586
  min:
577
587
  metric_query: MIN("{{ col_name }}")
578
588
  metric_return_datatype: TIMESTAMP WITH TIME ZONE
589
+ metric_normalization: TO_CHAR({{ metric_query }} AT TIME ZONE 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.US') || '000+00:00'
579
590
  max:
580
591
  metric_query: MAX("{{ col_name }}")
581
592
  metric_return_datatype: TIMESTAMP WITH TIME ZONE
593
+ metric_normalization: TO_CHAR({{ metric_query }} AT TIME ZONE 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.US') || '000+00:00'
582
594
  count_null:
583
595
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
584
596
  metric_return_datatype: INTEGER
@@ -36,6 +36,7 @@ from snowflake.snowflake_data_validation.query.vector_element_kind import (
36
36
  from snowflake.snowflake_data_validation.utils.constants import (
37
37
  NULL_HASHING_SENTINEL,
38
38
  NULL_HASHING_SENTINEL_KEY,
39
+ NUMERIC_FORMAT_MASK_PLACEHOLDER,
39
40
  ROW_HASH_COLUMN_DELIMITER,
40
41
  ROW_HASH_COLUMN_DELIMITER_KEY,
41
42
  Platform,
@@ -69,6 +70,27 @@ def build_postgresql_vector_bit_shim(col_ref: str, element) -> str:
69
70
  return f"CASE WHEN {col_ref} IS NULL THEN NULL ELSE ({inner}) END"
70
71
 
71
72
 
73
+ def build_postgresql_numeric_canonical_expr(col_ref: str, format_mask: str, scale: int) -> str:
74
+ """Restore FM leading zeros PostgreSQL omits for |v| < 1 to match Snowflake ``TO_VARCHAR``.
75
+
76
+ ``TO_CHAR`` with an ``FM`` mask renders ``|v| < 1`` without the integer zero
77
+ (``.0001``), while Snowflake ``TO_VARCHAR`` keeps it (``0.0001``). Prefix the missing
78
+ zero (handling the negative ``-.0001`` case) so row hashes and L3 cell comparisons stay
79
+ aligned. Mirrors Oracle / Teradata / Snowflake / Redshift, each of which restores the
80
+ leading zero in its own wrapper.
81
+
82
+ Exact zeros short-circuit because a mask-rendered zero carries no integer digit at all.
83
+ """
84
+ zero_literal = f"0.{'0' * scale}" if scale > 0 else "0"
85
+ inner = f"TRIM(TO_CHAR(CAST({col_ref} AS NUMERIC), '{format_mask}'))"
86
+ return (
87
+ f"CASE WHEN {col_ref} IS NULL THEN NULL "
88
+ f"WHEN {col_ref} = 0 THEN '{zero_literal}' "
89
+ f"ELSE TRIM(REGEXP_REPLACE("
90
+ f"TRIM(REGEXP_REPLACE({inner}, '^-\\.', '-0.')), '^\\.', '0.')) END"
91
+ )
92
+
93
+
72
94
  class QueryGeneratorPostgresql(QueryGeneratorBase):
73
95
  """Query generator for PostgreSQL (chunked MD5 pipeline aligned with Redshift)."""
74
96
 
@@ -97,6 +119,14 @@ class QueryGeneratorPostgresql(QueryGeneratorBase):
97
119
  element = vector_element_kind(getattr(column, "data_type", "") or "")
98
120
  return build_postgresql_vector_bit_shim(col_ref, element)
99
121
 
122
+ def render_normalization_template(self, template: str, column) -> str:
123
+ """Wrap numeric ``TO_CHAR`` output to restore the FM-suppressed leading zero."""
124
+ if NUMERIC_FORMAT_MASK_PLACEHOLDER in template and "TO_CHAR" in template and self._is_numeric_normalization_type(column.data_type):
125
+ scale = self._resolve_numeric_scale(column)
126
+ mask = self._build_numeric_format_mask(scale)
127
+ return build_postgresql_numeric_canonical_expr(f'"{column.name}"', mask, scale)
128
+ return super().render_normalization_template(template, column)
129
+
100
130
  def _render_normalization_template(self, template: str, column) -> str:
101
131
  return super()._render_normalization_template(template, column)
102
132
 
@@ -37,6 +37,7 @@ def validate_cell(
37
37
  table_context: TableContext,
38
38
  index_columns: list[str] | None = None,
39
39
  target_index_columns: list[str] | None = None,
40
+ semi_structured_columns: frozenset[str] | None = None,
40
41
  ) -> tuple[ValidationResult, list[DuplicateKeyInfo]]:
41
42
  """Validate individual cell values between source and target.
42
43
 
@@ -58,6 +59,9 @@ def validate_cell(
58
59
  When ``None``, rows are matched positionally.
59
60
  target_index_columns: Target-side key column names.
60
61
  Defaults to *index_columns* when ``None``.
62
+ semi_structured_columns: Source-side column names needing recursive
63
+ JSON canonicalization (e.g. a Redshift SUPER column paired with
64
+ a Snowflake VARIANT mirror) instead of a plain string compare.
61
65
 
62
66
  Returns:
63
67
  A tuple of ``(ValidationResult, duplicate_key_infos)`` where
@@ -78,6 +82,7 @@ def validate_cell(
78
82
  target_index_columns=target_index_columns,
79
83
  platform=table_context.platform.value,
80
84
  object_id=table_context.id,
85
+ semi_structured_columns=semi_structured_columns,
81
86
  )
82
87
 
83
88
  return (
@@ -47,6 +47,7 @@ _SCHEMA_MIGRATION_MAPPING_ENRICH_PLATFORMS: frozenset[Platform] = frozenset(
47
47
  Platform.ORACLE,
48
48
  Platform.SQLSERVER,
49
49
  Platform.REDSHIFT,
50
+ Platform.AZURE_SYNAPSE,
50
51
  }
51
52
  )
52
53
 
@@ -46,6 +46,7 @@ _MONEY_SCALE_BY_TYPE = {
46
46
 
47
47
  # Snowflake NUMBER(p, s): max 38 total digits, max 37 fractional digits.
48
48
  SNOWFLAKE_MAX_NUMBER_SCALE = 37
49
+ SNOWFLAKE_MAX_NUMBER_PRECISION = 38
49
50
 
50
51
 
51
52
  def parse_scale_value(raw: object) -> int | None: