snowflake-data-validation 1.43.0__tar.gz → 1.44.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 (685) hide show
  1. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/.gitignore +1 -0
  2. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/PKG-INFO +67 -3
  3. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/README.md +64 -0
  4. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/pyproject.toml +3 -3
  5. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +3 -3
  6. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +25 -14
  7. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +71 -0
  8. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +8 -8
  9. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +13 -0
  10. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +15 -7
  11. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +4 -2
  12. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +1 -1
  13. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +10 -1
  14. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +7 -7
  15. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +8 -0
  16. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +2 -0
  17. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +3 -0
  18. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/db2/db2_lob_normalization.py +91 -0
  19. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +155 -4
  20. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +34 -9
  21. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +2 -2
  22. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +18 -5
  23. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +7 -0
  24. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +34 -15
  25. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +17 -6
  26. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +30 -1
  27. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +93 -10
  28. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +6 -13
  29. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +10 -4
  30. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +3 -3
  31. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +16 -5
  32. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +2 -1
  33. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +24 -9
  34. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/oracle/oracle_statement_functions.py +28 -0
  35. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/oracle/oracle_xmltype.py +39 -0
  36. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +25 -8
  37. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +4 -12
  38. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +4 -0
  39. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +39 -3
  40. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +8 -1
  41. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +7 -0
  42. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +11 -0
  43. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +11 -4
  44. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +140 -27
  45. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +211 -62
  46. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +47 -2
  47. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +13 -0
  48. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +9 -6
  49. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +240 -0
  50. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +3 -3
  51. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +5 -5
  52. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +11 -0
  53. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +35 -2
  54. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +26 -0
  55. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +10 -0
  56. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +8 -0
  57. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +4 -4
  58. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +3 -3
  59. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +11 -0
  60. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +186 -96
  61. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +10 -0
  62. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +3 -3
  63. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +86 -25
  64. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +16 -16
  65. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +71 -0
  66. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +10 -0
  67. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +8 -8
  68. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +13 -0
  69. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +1 -0
  70. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +17 -3
  71. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_string_length_normalization.py +42 -0
  72. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_tz_normalization.py +32 -0
  73. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +1 -1
  74. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +13 -1
  75. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +4 -1
  76. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +8 -2
  77. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +12 -1
  78. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +58 -15
  79. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +17 -1
  80. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +9 -24
  81. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +1 -1
  82. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +12 -33
  83. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/constants.py +26 -0
  84. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/utils/dv_tracing.py +108 -0
  85. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/utils/error_classifier.py +291 -0
  86. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +66 -2
  87. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +14 -13
  88. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +64 -11
  89. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +104 -28
  90. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/utils/lob_source_types.py +36 -0
  91. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/logging_config.py +8 -13
  92. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +40 -19
  93. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/utils/model/column_selection.py +298 -0
  94. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +263 -149
  95. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +30 -5
  96. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/utils/period_common.py +406 -0
  97. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +91 -3
  98. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/utils/row_validation_lob_exclusion.py +174 -0
  99. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/telemetry.py +34 -98
  100. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +3 -0
  101. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +3 -0
  102. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +86 -5
  103. snowflake_data_validation-1.44.0/src/snowflake/snowflake_data_validation/validation/object_type_criterion.py +109 -0
  104. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +266 -20
  105. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +133 -20
  106. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +4 -2
  107. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +22 -2
  108. snowflake_data_validation-1.44.0/tests/unit/Postgresql/test_postgresql_bit_count_distinct.py +73 -0
  109. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Postgresql/test_postgresql_collation.py +11 -3
  110. snowflake_data_validation-1.44.0/tests/unit/Postgresql/test_postgresql_json_cell_validation.py +100 -0
  111. snowflake_data_validation-1.44.0/tests/unit/Postgresql/test_postgresql_jsonb_row_hash.py +52 -0
  112. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/test_connector_redshift.py +63 -0
  113. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/test_redshift_collation.py +18 -0
  114. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/test_redshift_super_normalization.py +146 -2
  115. snowflake_data_validation-1.44.0/tests/unit/Teradata/test_period_varchar_l1.py +69 -0
  116. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Teradata/test_teradata_collation.py +4 -0
  117. snowflake_data_validation-1.44.0/tests/unit/azure_synapse/test_azure_synapse_l3_convert_normalization.py +161 -0
  118. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +23 -3
  119. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +6 -3
  120. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +90 -48
  121. snowflake_data_validation-1.44.0/tests/unit/conftest.py +60 -0
  122. snowflake_data_validation-1.44.0/tests/unit/db2/test_db2_lob_dv_generation.py +170 -0
  123. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/db2/test_db2_query_generator.py +167 -0
  124. snowflake_data_validation-1.44.0/tests/unit/db2/test_db2_xml_long_dv_generation.py +147 -0
  125. snowflake_data_validation-1.44.0/tests/unit/db2/test_db2_xml_long_metrics.py +124 -0
  126. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +8 -7
  127. snowflake_data_validation-1.44.0/tests/unit/oracle/test_oracle_configured_index_columns.py +171 -0
  128. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_lob_dv_generation.py +8 -2
  129. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_lob_normalization.py +14 -0
  130. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_normalization_templates.py +11 -0
  131. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_query_generator.py +120 -7
  132. snowflake_data_validation-1.44.0/tests/unit/oracle/test_oracle_quoted_identifiers.py +127 -0
  133. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +17 -0
  134. snowflake_data_validation-1.44.0/tests/unit/sqlserver/test_sqlserver_datetimeoffset_metrics_utc.py +109 -0
  135. snowflake_data_validation-1.44.0/tests/unit/sqlserver/test_sqlserver_json.py +46 -0
  136. snowflake_data_validation-1.44.0/tests/unit/sqlserver/test_sqlserver_l3_convert_normalization.py +154 -0
  137. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_sqlserver_length_metrics_chars.py +27 -7
  138. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_sqlserver_row_queries.py +143 -46
  139. snowflake_data_validation-1.44.0/tests/unit/sqlserver/test_sqlserver_string_length_pairing.py +82 -0
  140. snowflake_data_validation-1.44.0/tests/unit/sqlserver/test_sqlserver_xml_image_metrics.py +78 -0
  141. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_accepted_transformation.py +1 -0
  142. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_batched_metrics_queries.py +87 -2
  143. snowflake_data_validation-1.44.0/tests/unit/test_catalog_queries_take_actual_names.py +109 -0
  144. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_cell_validation_query_generation.py +10 -10
  145. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_charset_normalization.py +13 -0
  146. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_column_normalization_override.py +2 -0
  147. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_column_partitioning_strategy.py +21 -0
  148. snowflake_data_validation-1.44.0/tests/unit/test_column_selection.py +168 -0
  149. snowflake_data_validation-1.44.0/tests/unit/test_column_selection_actual_names.py +310 -0
  150. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_configuration_file_editor.py +32 -0
  151. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_configuration_file_generator.py +55 -0
  152. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_configuration_file_synchronizer.py +31 -0
  153. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_configuration_loader.py +73 -0
  154. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_configuration_model.py +10 -0
  155. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_custom_templates_models.py +103 -1
  156. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_data_validator.py +422 -0
  157. snowflake_data_validation-1.44.0/tests/unit/test_dv_tracing.py +218 -0
  158. snowflake_data_validation-1.44.0/tests/unit/test_error_classifier.py +213 -0
  159. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_float_bit_canonical.py +22 -0
  160. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_float_canonical_templates.py +35 -1
  161. snowflake_data_validation-1.44.0/tests/unit/test_helper_io.py +97 -0
  162. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_helpers.py +108 -5
  163. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_iceberg_dv_l3_normalization.py +101 -0
  164. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_iceberg_v2_metrics_exclusion.py +66 -21
  165. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_iso_dv_common.py +193 -8
  166. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_l2_collation_metadata.py +55 -2
  167. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_metric_identifier_rendering.py +75 -2
  168. snowflake_data_validation-1.44.0/tests/unit/test_object_type_criterion.py +116 -0
  169. snowflake_data_validation-1.44.0/tests/unit/test_parallel_execution_engine_fatal_errors.py +47 -0
  170. snowflake_data_validation-1.44.0/tests/unit/test_period_common.py +185 -0
  171. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_query_generator_numeric_scale.py +48 -3
  172. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_qvci_fallback_triggers.py +69 -0
  173. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_redshift_native_timestamptz_ltz.py +2 -1
  174. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_row_data_validator.py +308 -0
  175. snowflake_data_validation-1.44.0/tests/unit/test_row_data_validator_empty_chunk.py +88 -0
  176. snowflake_data_validation-1.44.0/tests/unit/test_row_validation_lob_exclusion.py +446 -0
  177. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_schema_column_selection.py +119 -33
  178. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_signature_row_md5_query.py +1 -1
  179. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_snowflake_binary_normalization_templates.py +1 -1
  180. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_snowflake_redshift_super_size_guard.py +99 -21
  181. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_sql_literal_jinja_filter.py +26 -13
  182. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_sqlserver_multi_version_support.py +7 -5
  183. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_sync_executor_qvci_fallback.py +24 -0
  184. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_sync_validation_executor.py +184 -4
  185. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_table_configuration.py +6 -0
  186. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_table_context.py +117 -60
  187. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_telemetry.py +28 -0
  188. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_templates_loader_manager.py +22 -0
  189. snowflake_data_validation-1.44.0/tests/unit/test_teradata_timetz_metric_domain.py +178 -0
  190. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_timestamp_golden_vectors.py +33 -26
  191. snowflake_data_validation-1.44.0/tests/unit/test_trace_bridge.py +193 -0
  192. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_validation_configuration.py +4 -0
  193. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_validation_execution_context.py +12 -1
  194. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_vector_bit_normalization.py +1 -1
  195. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_view_configuration.py +6 -0
  196. snowflake_data_validation-1.43.0/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +0 -60
  197. snowflake_data_validation-1.43.0/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +0 -126
  198. snowflake_data_validation-1.43.0/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -11
  199. snowflake_data_validation-1.43.0/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -10
  200. snowflake_data_validation-1.43.0/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -8
  201. snowflake_data_validation-1.43.0/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -52
  202. snowflake_data_validation-1.43.0/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -10
  203. snowflake_data_validation-1.43.0/tests/unit/test_teradata_timetz_metric_domain.py +0 -98
  204. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/LICENSE +0 -0
  205. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/docs/README.md +0 -0
  206. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
  207. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
  208. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
  209. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
  210. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
  211. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
  212. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
  213. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
  214. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
  215. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
  216. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
  217. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
  218. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
  219. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
  220. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
  221. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
  222. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
  223. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
  224. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +0 -0
  225. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +0 -0
  226. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
  227. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +0 -0
  228. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
  229. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
  230. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +0 -0
  231. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
  232. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
  233. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
  234. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
  235. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
  236. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
  237. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
  238. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
  239. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
  240. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
  241. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
  242. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
  243. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
  244. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
  245. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
  246. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
  247. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
  248. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
  249. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
  250. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
  251. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
  252. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
  253. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
  254. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
  255. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
  256. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
  257. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
  258. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
  259. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
  260. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
  261. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
  262. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
  263. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
  264. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
  265. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
  266. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
  267. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
  268. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
  269. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
  270. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
  271. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
  272. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
  273. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
  274. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
  275. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
  276. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
  277. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
  278. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
  279. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
  280. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
  281. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
  282. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
  283. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  284. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
  285. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
  286. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
  287. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
  288. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
  289. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
  290. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
  291. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
  292. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
  293. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
  294. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
  295. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
  296. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
  297. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
  298. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
  299. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
  300. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
  301. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
  302. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
  303. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
  304. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
  305. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
  306. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
  307. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
  308. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
  309. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
  310. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
  311. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
  312. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
  313. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
  314. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
  315. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
  316. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
  317. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
  318. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
  319. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
  320. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
  321. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
  322. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
  323. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
  324. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
  325. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
  326. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
  327. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
  328. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
  329. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
  330. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
  331. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
  332. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
  333. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
  334. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
  335. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
  336. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
  337. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
  338. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
  339. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
  340. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
  341. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
  342. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
  343. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
  344. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
  345. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
  346. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
  347. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
  348. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
  349. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
  350. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
  351. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +0 -0
  352. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +0 -0
  353. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
  354. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
  355. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/sql_type_families.py +0 -0
  356. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
  357. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
  358. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
  359. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
  360. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
  361. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
  362. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  363. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
  364. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
  365. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
  366. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
  367. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
  368. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
  369. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
  370. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
  371. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
  372. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
  373. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
  374. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
  375. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
  376. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
  377. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
  378. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
  379. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
  380. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
  381. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
  382. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
  383. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
  384. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
  385. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
  386. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
  387. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
  388. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
  389. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
  390. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
  391. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
  392. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
  393. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
  394. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
  395. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
  396. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +0 -0
  397. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
  398. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
  399. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
  400. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
  401. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
  402. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
  403. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
  404. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
  405. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
  406. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
  407. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
  408. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
  409. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
  410. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
  411. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
  412. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
  413. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
  414. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
  415. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
  416. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
  417. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
  418. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
  419. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
  420. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
  421. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
  422. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
  423. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
  424. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
  425. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
  426. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
  427. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
  428. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
  429. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
  430. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
  431. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
  432. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
  433. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
  434. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
  435. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
  436. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
  437. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
  438. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
  439. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
  440. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
  441. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
  442. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
  443. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
  444. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
  445. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
  446. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
  447. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
  448. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
  449. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
  450. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
  451. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
  452. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
  453. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
  454. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
  455. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
  456. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
  457. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
  458. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
  459. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +0 -0
  460. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
  461. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
  462. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
  463. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
  464. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
  465. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
  466. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
  467. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
  468. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
  469. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
  470. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
  471. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
  472. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
  473. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
  474. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
  475. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
  476. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
  477. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
  478. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
  479. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
  480. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
  481. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
  482. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
  483. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
  484. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
  485. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
  486. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
  487. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
  488. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
  489. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
  490. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
  491. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
  492. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
  493. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
  494. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
  495. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
  496. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
  497. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
  498. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
  499. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +0 -0
  500. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
  501. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
  502. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
  503. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
  504. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
  505. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
  506. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
  507. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
  508. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
  509. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
  510. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
  511. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
  512. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
  513. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
  514. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
  515. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
  516. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
  517. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
  518. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
  519. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
  520. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
  521. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
  522. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
  523. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
  524. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
  525. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
  526. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
  527. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
  528. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/.coveragerc +0 -0
  529. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/conftest.py +0 -0
  530. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/integration/.coveragerc +0 -0
  531. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
  532. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/integration/test_async_generation_integration.py +0 -0
  533. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/integration/test_async_validation_integration.py +0 -0
  534. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/integration/test_reference_integration.py +0 -0
  535. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/integration/test_source_validation_integration.py +0 -0
  536. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/integration/test_sync_validation_integration.py +0 -0
  537. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
  538. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
  539. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
  540. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
  541. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
  542. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
  543. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
  544. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
  545. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/test_redshift_timetz_sentinel_normalization.py +0 -0
  546. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
  547. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Teradata/test_connector_teradata.py +0 -0
  548. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
  549. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
  550. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
  551. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
  552. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
  553. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
  554. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/__init__.py +0 -0
  555. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
  556. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
  557. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
  558. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
  559. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
  560. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
  561. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
  562. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
  563. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
  564. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
  565. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
  566. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
  567. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
  568. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
  569. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
  570. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/azure_synapse/__init__.py +0 -0
  571. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
  572. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
  573. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
  574. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
  575. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/bigquery/__init__.py +0 -0
  576. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/bigquery/test_bigquery_l1_string_length.py +0 -0
  577. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
  578. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/bigquery/test_query_generator_bigquery.py +0 -0
  579. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
  580. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/db2/__init__.py +0 -0
  581. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
  582. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/db2/test_db2_registration.py +0 -0
  583. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/__init__.py +0 -0
  584. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
  585. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
  586. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
  587. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
  588. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
  589. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
  590. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
  591. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlite/__init__.py +0 -0
  592. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
  593. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
  594. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
  595. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
  596. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
  597. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/__init__.py +0 -0
  598. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
  599. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
  600. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -0
  601. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
  602. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
  603. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
  604. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/sqlserver/test_tsql_integer_stddev_exact.py +0 -0
  605. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_arguments_manager_base.py +0 -0
  606. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_arguments_manager_factory.py +0 -0
  607. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
  608. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_catalog_column_size.py +0 -0
  609. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_cell_data_validator.py +0 -0
  610. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_cell_data_validator_threading.py +0 -0
  611. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_column_grouping.py +0 -0
  612. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_column_metadata.py +0 -0
  613. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_comparison_codec.py +0 -0
  614. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_comparison_orchestrator.py +0 -0
  615. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_connection_pool.py +0 -0
  616. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_connector_failure_tracker.py +0 -0
  617. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_connector_snowflake.py +0 -0
  618. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_cpu_optimizer.py +0 -0
  619. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_escape_odbc_value.py +0 -0
  620. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_executor_factory.py +0 -0
  621. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_get_configuration_file.py +0 -0
  622. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_get_target_cols.py +0 -0
  623. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_helper_dataframe.py +0 -0
  624. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_helper_polars_cast.py +0 -0
  625. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_html_report_builder.py +0 -0
  626. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_index_key_format.py +0 -0
  627. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_internal_helpers.py +0 -0
  628. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_interval_common.py +0 -0
  629. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_logging_config.py +0 -0
  630. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_metrics_reshape.py +0 -0
  631. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_metrics_result_shape.py +0 -0
  632. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_metrics_templates_casts.py +0 -0
  633. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_metrics_tolerance.py +0 -0
  634. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_normalize_shape_aware.py +0 -0
  635. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_numeric_scale_resolution.py +0 -0
  636. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_platform_bridge.py +0 -0
  637. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_postgresql_normalization_templates.py +0 -0
  638. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_postgresql_tz_normalization.py +0 -0
  639. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_pushdown_diff_sql.py +0 -0
  640. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_query_cell_level_validation.py +0 -0
  641. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_query_executor.py +0 -0
  642. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_query_metrics_level_validation.py +0 -0
  643. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_query_to_dataframe.py +0 -0
  644. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_query_validator.py +0 -0
  645. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_qvci_fallback.py +0 -0
  646. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
  647. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_report_metadata.py +0 -0
  648. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_result_set_cell_level_validation.py +0 -0
  649. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
  650. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_result_set_snapshot_generation.py +0 -0
  651. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_result_set_snapshot_validation.py +0 -0
  652. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_result_set_to_dataframe.py +0 -0
  653. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_result_set_validator.py +0 -0
  654. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_row_count_bigint_overflow.py +0 -0
  655. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_row_hash_column_delimiter.py +0 -0
  656. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_row_partitioning_strategy.py +0 -0
  657. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_row_validation_report_buffer.py +0 -0
  658. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_shutdown_coordinator.py +0 -0
  659. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_signature_external_table.py +0 -0
  660. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_snapshot_validation_statements.py +0 -0
  661. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_snowflake_arguments_manager.py +0 -0
  662. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_source_validation_executor.py +0 -0
  663. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
  664. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_sql_catalog_template_guard.py +0 -0
  665. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_sqlite_validation_connection.py +0 -0
  666. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
  667. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_table_column_metadata_model.py +0 -0
  668. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_table_metadata_processor.py +0 -0
  669. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_table_snapshot_generation.py +0 -0
  670. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_table_snapshot_validation.py +0 -0
  671. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_target_platform_factory.py +0 -0
  672. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_teradata_iso_normalization.py +0 -0
  673. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_teradata_string_rtrim_policy.py +0 -0
  674. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_teradata_type_code_mapping.py +0 -0
  675. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_validation_database_connection.py +0 -0
  676. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_validation_progress_reporter.py +0 -0
  677. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_validation_report_buffer.py +0 -0
  678. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_validation_report_status.py +0 -0
  679. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_validation_templates_dto.py +0 -0
  680. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_vector_common.py +0 -0
  681. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_vector_normalization.py +0 -0
  682. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/test_warm_start.py +0 -0
  683. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/utils/__init__.py +0 -0
  684. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/utils/test_constants.py +0 -0
  685. {snowflake_data_validation-1.43.0 → snowflake_data_validation-1.44.0}/tests/unit/utils/test_semi_structured_json_canonicalization.py +0 -0
@@ -232,6 +232,7 @@ requirements-dev.lock
232
232
 
233
233
  # E2E test session config (contains credentials)
234
234
  e2e-tests/config.yaml
235
+ e2e-tests/dev-1tb-iceberg-worker.toml
235
236
 
236
237
  # E2E Logs
237
238
  e2e-tests/e2e-logs/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: snowflake-data-validation
3
- Version: 1.43.0
3
+ Version: 1.44.0
4
4
  Summary: Snowflake Data Validation
5
5
  Project-URL: Bug Tracker, https://github.com/snowflake-eng/migrations-data-validation/issues
6
6
  Project-URL: Source code, https://github.com/snowflake-eng/migrations-data-validation/
@@ -38,7 +38,7 @@ Requires-Dist: pydantic-yaml>=1.4.0
38
38
  Requires-Dist: pydantic>=2.0
39
39
  Requires-Dist: pyyaml>=6.0
40
40
  Requires-Dist: ruamel-yaml>=0.18.0
41
- Requires-Dist: snowflake-connector-python>=4.7.1
41
+ Requires-Dist: snowflake-connector-python<5,>=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
@@ -79,7 +79,7 @@ Requires-Dist: psycopg[binary]>=3.2.0; extra == 'postgresql'
79
79
  Provides-Extra: redshift
80
80
  Requires-Dist: redshift-connector>=2.1.14; extra == 'redshift'
81
81
  Provides-Extra: scai
82
- Requires-Dist: snowflake-code-unit-registry>=0.8.83; extra == 'scai'
82
+ Requires-Dist: snowflake-code-unit-registry>=0.9.0; extra == 'scai'
83
83
  Provides-Extra: sqlite
84
84
  Requires-Dist: sqlean-py>=3.45.0; extra == 'sqlite'
85
85
  Provides-Extra: sqlserver
@@ -162,6 +162,8 @@ Compares statistical metrics for each column:
162
162
  - Null count
163
163
  - Distinct count
164
164
 
165
+ For some types these metrics do not depend on the values themselves (for SQL Server: `VECTOR`, `XML`, `IMAGE`, `SQL_VARIANT`, `JSON`, `GEOGRAPHY`, `GEOMETRY`, `UNIQUEIDENTIFIER`), so a changed value can pass L2. Use L3 row validation to compare those columns' values. The per-type list is in `docs/data-migration-orchestrator/sqlserver-data-type-coverage.md` in this repo.
166
+
165
167
  ### Views
166
168
 
167
169
  For **Redshift** and **Teradata** sources, views are validated on the view itself (no `CREATE TABLE AS SELECT` materialization in local sync mode). Other platforms may still materialize views to temporary tables before L1/L2/L3. **Teradata** views are read via `DBC.ColumnsQV` (Teradata's Query View Column Information catalog), so view L1 covers the full field set — column existence, datatype, precision, scale, length, nullability, and ordinal position — matching the table path. When `DBC.ColumnsQV` is unavailable (QVCI disabled → Teradata error 9719, missing `SELECT` grant, any other failure of that catalog query, or a degenerate result with null `DATA_TYPE`), the extractor falls back to `HELP COLUMN` with `basic_validation=True` and emits one WARNING schema row per view naming the trigger and the remediation. If HELP fails or source schema metadata still has no usable `DATA_TYPE` (including a view validated as a table whose `ColumnsV` types are null), L1 fails that object and does not continue to L2/L3. **Redshift** uses full schema metadata like tables.
@@ -182,6 +184,28 @@ Performs row-by-row comparison:
182
184
 
183
185
  ---
184
186
 
187
+ ## 🐍 Python version inside SnowConvert AI
188
+
189
+ The `scai` CLI also ships this package vendored and runs it in the interpreter CSnakes downloads,
190
+ not the Python you `pip install` into. That interpreter is pinned by
191
+ `ServiceCollectionExtensions.RedistributablePython` in
192
+ `Snowflake.SnowConvertDesktop/Snowflake.SnowConvert.Jobs/Extensions/PythonEnvironmentExtenstion.cs`
193
+ (today `RedistributablePythonVersion.Python3_12`, which CSnakes.Runtime 1.2.1 resolves to CPython 3.12.9).
194
+
195
+ The `[CI][SCAI] CSnakes interpreter-pin audit` workflow (`scai-csnakes-pin-audit.yml`) fails when that
196
+ version does not meet the `requires-python` of this package or of the other projects vendored beside it.
197
+ To update the pin:
198
+
199
+ 1. Change `RedistributablePython` to another `RedistributablePythonVersion` member, or bump
200
+ `CSnakes.Runtime` to the same version in both `Snowflake.SnowConvert.Jobs.csproj` and
201
+ `Snowflake.SnowConvert.Assessment.csproj`.
202
+ 2. Run `python .github/scripts/snowconvert-ai/csnakes_pin_audit.py` (needs `dotnet` and `packaging`).
203
+ It prints the resolved version and every audited floor.
204
+
205
+ Raising `requires-python` here above the pinned version fails the audit until the pin moves too.
206
+
207
+ ---
208
+
185
209
  ## 📚 Documentation
186
210
 
187
211
  For configuration options and examples, see the [official documentation](https://docs.snowflake.com/en/migrations/snowconvert-docs/data-validation-cli/CLI_QUICK_REFERENCE).
@@ -190,6 +214,46 @@ For configuration options and examples, see the [official documentation](https:/
190
214
 
191
215
  ## Changelog
192
216
 
217
+ ### v1.44.0
218
+
219
+ **New features**
220
+
221
+ - Added Teradata `PERIOD` type dual-path validation helpers.
222
+ - Added per-column L2 metric overrides for data validation.
223
+ - Added column-scoped custom validation metrics model.
224
+ - Added Iceberg `FULL_INGEST` native temporal type migration support.
225
+
226
+ **Improvements**
227
+
228
+ - Improved trace-id correlation across SCAI and DMVF logs.
229
+ - Improved L2 metrics on Iceberg profiles by excluding flattened `VARCHAR` columns.
230
+ - Improved `TIME` type extraction to use ISO text format across all native data migration paths.
231
+ - Improved handling of opaque and complex types to use NULL and distinct-count checks instead of value comparison.
232
+
233
+ **Bug fixes**
234
+
235
+ - Fixed ETL compare failure when decoding the bundled datatype-normalization YAML.
236
+ - Fixed Oracle `XMLTYPE` hybrid L3 validation failure with `ORA-28817` in `DBMS_CRYPTO.HASH`.
237
+ - Fixed bare BigQuery `BIGNUMERIC` alignment with the engine `DECFLOAT` mapping.
238
+ - Fixed Oracle metadata templates incorrectly upper-casing quoted table and column names.
239
+ - Fixed `DATETIMEOFFSET` false mismatches caused by offset not being normalized to UTC.
240
+ - Fixed SQL Server `XML` and `IMAGE` columns failing the entire L2 metrics batch.
241
+ - Fixed SQL Server `TEXT` and `NTEXT` `count_distinct` producing invalid T-SQL and missing `BIN2` collation.
242
+ - Fixed PostgreSQL `BIT`, `BIT VARYING`, and `VARBIT` `count_distinct` failing the L2 metrics batch.
243
+ - Fixed DB2 `XML`, `LONG VARCHAR`, and `LONG VARGRAPHIC` falling to default `COUNT(DISTINCT)` and failing the L2 metrics batch.
244
+ - Fixed DB2 `BOOLEAN` metric set mismatch with Snowflake `BOOLEAN` metrics.
245
+ - Fixed SQL Server row validation failure on tables with an `IMAGE` column.
246
+ - Fixed string-length metrics producing false failures on SQL Server to Snowflake validation.
247
+ - Fixed SQL identifier quoting to use dialect-correct syntax across all platforms.
248
+ - Fixed row validation incorrectly reporting `DATA_MATCH` when the target table contains extra duplicate rows.
249
+
250
+ ### v1.43.1
251
+
252
+ **Bug fixes**
253
+
254
+ - Fixed Teradata `WRITE_NOS` extract retry failing with Error 9134 (object already exists) after a session drop by clearing the landing prefix before each attempt.
255
+ - Fixed false `MISMATCH` results for PostgreSQL `JSON`/`JSONB` vs Snowflake `VARIANT` on key order, number spelling, and whitespace inside strings.
256
+
193
257
  ### v1.43.0
194
258
 
195
259
  **New features**
@@ -71,6 +71,8 @@ Compares statistical metrics for each column:
71
71
  - Null count
72
72
  - Distinct count
73
73
 
74
+ For some types these metrics do not depend on the values themselves (for SQL Server: `VECTOR`, `XML`, `IMAGE`, `SQL_VARIANT`, `JSON`, `GEOGRAPHY`, `GEOMETRY`, `UNIQUEIDENTIFIER`), so a changed value can pass L2. Use L3 row validation to compare those columns' values. The per-type list is in `docs/data-migration-orchestrator/sqlserver-data-type-coverage.md` in this repo.
75
+
74
76
  ### Views
75
77
 
76
78
  For **Redshift** and **Teradata** sources, views are validated on the view itself (no `CREATE TABLE AS SELECT` materialization in local sync mode). Other platforms may still materialize views to temporary tables before L1/L2/L3. **Teradata** views are read via `DBC.ColumnsQV` (Teradata's Query View Column Information catalog), so view L1 covers the full field set — column existence, datatype, precision, scale, length, nullability, and ordinal position — matching the table path. When `DBC.ColumnsQV` is unavailable (QVCI disabled → Teradata error 9719, missing `SELECT` grant, any other failure of that catalog query, or a degenerate result with null `DATA_TYPE`), the extractor falls back to `HELP COLUMN` with `basic_validation=True` and emits one WARNING schema row per view naming the trigger and the remediation. If HELP fails or source schema metadata still has no usable `DATA_TYPE` (including a view validated as a table whose `ColumnsV` types are null), L1 fails that object and does not continue to L2/L3. **Redshift** uses full schema metadata like tables.
@@ -91,6 +93,28 @@ Performs row-by-row comparison:
91
93
 
92
94
  ---
93
95
 
96
+ ## 🐍 Python version inside SnowConvert AI
97
+
98
+ The `scai` CLI also ships this package vendored and runs it in the interpreter CSnakes downloads,
99
+ not the Python you `pip install` into. That interpreter is pinned by
100
+ `ServiceCollectionExtensions.RedistributablePython` in
101
+ `Snowflake.SnowConvertDesktop/Snowflake.SnowConvert.Jobs/Extensions/PythonEnvironmentExtenstion.cs`
102
+ (today `RedistributablePythonVersion.Python3_12`, which CSnakes.Runtime 1.2.1 resolves to CPython 3.12.9).
103
+
104
+ The `[CI][SCAI] CSnakes interpreter-pin audit` workflow (`scai-csnakes-pin-audit.yml`) fails when that
105
+ version does not meet the `requires-python` of this package or of the other projects vendored beside it.
106
+ To update the pin:
107
+
108
+ 1. Change `RedistributablePython` to another `RedistributablePythonVersion` member, or bump
109
+ `CSnakes.Runtime` to the same version in both `Snowflake.SnowConvert.Jobs.csproj` and
110
+ `Snowflake.SnowConvert.Assessment.csproj`.
111
+ 2. Run `python .github/scripts/snowconvert-ai/csnakes_pin_audit.py` (needs `dotnet` and `packaging`).
112
+ It prints the resolved version and every audited floor.
113
+
114
+ Raising `requires-python` here above the pinned version fails the audit until the pin moves too.
115
+
116
+ ---
117
+
94
118
  ## 📚 Documentation
95
119
 
96
120
  For configuration options and examples, see the [official documentation](https://docs.snowflake.com/en/migrations/snowconvert-docs/data-validation-cli/CLI_QUICK_REFERENCE).
@@ -99,6 +123,46 @@ For configuration options and examples, see the [official documentation](https:/
99
123
 
100
124
  ## Changelog
101
125
 
126
+ ### v1.44.0
127
+
128
+ **New features**
129
+
130
+ - Added Teradata `PERIOD` type dual-path validation helpers.
131
+ - Added per-column L2 metric overrides for data validation.
132
+ - Added column-scoped custom validation metrics model.
133
+ - Added Iceberg `FULL_INGEST` native temporal type migration support.
134
+
135
+ **Improvements**
136
+
137
+ - Improved trace-id correlation across SCAI and DMVF logs.
138
+ - Improved L2 metrics on Iceberg profiles by excluding flattened `VARCHAR` columns.
139
+ - Improved `TIME` type extraction to use ISO text format across all native data migration paths.
140
+ - Improved handling of opaque and complex types to use NULL and distinct-count checks instead of value comparison.
141
+
142
+ **Bug fixes**
143
+
144
+ - Fixed ETL compare failure when decoding the bundled datatype-normalization YAML.
145
+ - Fixed Oracle `XMLTYPE` hybrid L3 validation failure with `ORA-28817` in `DBMS_CRYPTO.HASH`.
146
+ - Fixed bare BigQuery `BIGNUMERIC` alignment with the engine `DECFLOAT` mapping.
147
+ - Fixed Oracle metadata templates incorrectly upper-casing quoted table and column names.
148
+ - Fixed `DATETIMEOFFSET` false mismatches caused by offset not being normalized to UTC.
149
+ - Fixed SQL Server `XML` and `IMAGE` columns failing the entire L2 metrics batch.
150
+ - Fixed SQL Server `TEXT` and `NTEXT` `count_distinct` producing invalid T-SQL and missing `BIN2` collation.
151
+ - Fixed PostgreSQL `BIT`, `BIT VARYING`, and `VARBIT` `count_distinct` failing the L2 metrics batch.
152
+ - Fixed DB2 `XML`, `LONG VARCHAR`, and `LONG VARGRAPHIC` falling to default `COUNT(DISTINCT)` and failing the L2 metrics batch.
153
+ - Fixed DB2 `BOOLEAN` metric set mismatch with Snowflake `BOOLEAN` metrics.
154
+ - Fixed SQL Server row validation failure on tables with an `IMAGE` column.
155
+ - Fixed string-length metrics producing false failures on SQL Server to Snowflake validation.
156
+ - Fixed SQL identifier quoting to use dialect-correct syntax across all platforms.
157
+ - Fixed row validation incorrectly reporting `DATA_MATCH` when the target table contains extra duplicate rows.
158
+
159
+ ### v1.43.1
160
+
161
+ **Bug fixes**
162
+
163
+ - Fixed Teradata `WRITE_NOS` extract retry failing with Error 9134 (object already exists) after a session drop by clearing the landing prefix before each attempt.
164
+ - Fixed false `MISMATCH` results for PostgreSQL `JSON`/`JSONB` vs Snowflake `VARIANT` on key order, number spelling, and whitespace inside strings.
165
+
102
166
  ### v1.43.0
103
167
 
104
168
  **New features**
@@ -35,7 +35,7 @@ dependencies = [
35
35
  "connectorx>=0.3.0",
36
36
  "cryptography>=50.0.0",
37
37
  "deepdiff>=8.0.0",
38
- "snowflake-connector-python>=4.7.1",
38
+ "snowflake-connector-python>=4.7.1,<5",
39
39
  "pandas>=2.2.3",
40
40
  "polars>=1.0.0",
41
41
  "pyarrow>=14.0.0",
@@ -105,7 +105,7 @@ db2 = [
105
105
  # musllinux build, and SDV is published to public PyPI. Inside DMO/DEA the
106
106
  # dependency is already declared, so SDV's logger tree is covered there.
107
107
  scai = [
108
- "snowflake-code-unit-registry>=0.8.83",
108
+ "snowflake-code-unit-registry>=0.9.0",
109
109
  ]
110
110
 
111
111
  [project.urls]
@@ -201,7 +201,7 @@ check = [
201
201
  'python -m pip install --upgrade pip -q && pip list',
202
202
  "python -c \"import pathlib, shutil, site; roots=[pathlib.Path(p) for p in site.getsitepackages()]; stale=[r/'shared' for r in roots if (r/'shared').is_dir()]; [shutil.rmtree(p, ignore_errors=True) for p in stale]; print('removed', stale)\"",
203
203
  'python -m pip install -U -q -e ../shared',
204
- 'pytest -vvv --junitxml=tests/outcome/test-results.xml --cov=. --cov-branch --cov-config=tests/.coveragerc --cov-report=xml:tests/outcome/coverage-{matrix:python:{env:PYTHON_VERSION:unset}}.xml --cov-report=term --cov-report=html:tests/outcome/coverage-{matrix:python:{env:PYTHON_VERSION:unset}}.html --cov-report=json:tests/outcome/coverage-{matrix:python:{env:PYTHON_VERSION:unset}}.json tests --ignore=tests/integration',
204
+ 'pytest -vvv --junitxml=tests/outcome/test-results.xml --cov=. --cov-branch --cov-config=tests/.coveragerc --cov-report=xml:tests/outcome/coverage-{matrix:python:{env:PYTHON_VERSION:unset}}.xml --cov-report=term --cov-report=html:tests/outcome/coverage-{matrix:python:{env:PYTHON_VERSION:unset}}.html --cov-report=json:tests/outcome/coverage-{matrix:python:{env:PYTHON_VERSION:unset}}.json {args:tests --ignore=tests/integration}',
205
205
  ]
206
206
 
207
207
  coverage = [
@@ -2,13 +2,13 @@
2
2
  {{ qm.locking_prefix(query_modifiers) }}SELECT
3
3
  {% for column in column_collection %}
4
4
  {% if column.nullable %}
5
- coalesce({{ datatypes_normalization_renderer_templates[column.name] }}, '{{ null_hashing_sentinel }}') AS "{{ column.name }}"{% if not loop.last %},{% endif %}
5
+ coalesce({{ datatypes_normalization_renderer_templates[column.name] }}, '{{ null_hashing_sentinel }}') AS {{ column_sql_names[column.name] }}{% if not loop.last %},{% endif %}
6
6
  {% else %}
7
- {{ datatypes_normalization_renderer_templates[column.name] }} AS "{{ column.name }}"{% if not loop.last %},{% endif %}
7
+ {{ datatypes_normalization_renderer_templates[column.name] }} AS {{ column_sql_names[column.name] }}{% if not loop.last %},{% endif %}
8
8
  {% endif %}
9
9
  {% endfor %}
10
10
  {{ qm.render_from_clause(query_modifiers, fully_qualified_name, 't') }}
11
11
  {% if has_where_clause %} WHERE {{ where_clause }} {% endif %}
12
12
  {% if order_by_columns %}
13
- ORDER BY {% for c in order_by_columns %} {{ order_by_collation_expressions.get(c, '"' ~ c ~ '"') }}{% if not loop.last %}, {% endif %}{% endfor %}
13
+ ORDER BY {% for c in order_by_columns %} {{ order_by_collation_expressions.get(c, column_sql_names[c]) }}{% if not loop.last %}, {% endif %}{% endfor %}
14
14
  {% endif %}
@@ -4,8 +4,9 @@
4
4
  # Azure Synapse uses T-SQL syntax (subset of SQL Server):
5
5
  # - CASE WHEN for conditional expressions (IIF unsupported in Dedicated SQL Pool)
6
6
  # - STDEVP for population standard deviation
7
- # - DATALENGTH for byte-length of variable-length columns
8
- # - LEN for character-length of unicode columns
7
+ # - LEN for the character length of every text column. DATALENGTH counts bytes, which
8
+ # drifts from Snowflake LENGTH under a UTF-8 collation. LEN ignores trailing spaces;
9
+ # the Snowflake generator pairs it with LENGTH(RTRIM()) (SNOW-4292391)
9
10
  # - % 2097143 overflow guard for numeric aggregations (SNOW-3443973)
10
11
 
11
12
  # ---- Numeric types ----
@@ -331,14 +332,15 @@ BIT:
331
332
  # ---- Character types ----
332
333
 
333
334
  CHAR:
335
+ # Characters, not bytes, as VARCHAR below (SNOW-4292391). RTRIM drops CHAR padding.
334
336
  min:
335
- metric_query: MIN(DATALENGTH(RTRIM("{{ col_name }}")))
337
+ metric_query: MIN(LEN(RTRIM("{{ col_name }}")))
336
338
  metric_return_datatype: INT
337
339
  max:
338
- metric_query: MAX(DATALENGTH(RTRIM("{{ col_name }}")))
340
+ metric_query: MAX(LEN(RTRIM("{{ col_name }}")))
339
341
  metric_return_datatype: INT
340
342
  count_empty:
341
- metric_query: SUM(CASE WHEN DATALENGTH(RTRIM("{{ col_name }}")) = 0 THEN 1 ELSE 0 END)
343
+ metric_query: SUM(CASE WHEN LEN(RTRIM("{{ col_name }}")) = 0 THEN 1 ELSE 0 END)
342
344
  metric_return_datatype: INT
343
345
  count_distinct:
344
346
  metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}RTRIM("{{ col_name }}"){{ measure_collation_suffix }})
@@ -347,22 +349,26 @@ CHAR:
347
349
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
348
350
  metric_return_datatype: INT
349
351
  avg:
350
- metric_query: AVG(CAST(DATALENGTH(RTRIM("{{ col_name }}")) AS FLOAT))
352
+ metric_query: AVG(CAST(LEN(RTRIM("{{ col_name }}")) AS FLOAT))
351
353
  metric_return_datatype: FLOAT
352
354
  metric_column_modifier: "% 2097143"
353
355
 
354
356
  VARCHAR:
357
+ # Characters, trailing spaces trimmed (SNOW-4292391, as SQL Server's SNOW-4283493).
358
+ # DATALENGTH counted bytes, so 'É' under a UTF-8 collation was 2 against Snowflake's 1.
359
+ # LEN ignores trailing spaces and the Snowflake side RTRIMs, so 'abc ' is 3 and ' '
360
+ # is empty on both sides. count_distinct keeps trailing spaces significant.
355
361
  min:
356
- metric_query: MIN(DATALENGTH("{{ col_name }}"))
362
+ metric_query: MIN(LEN("{{ col_name }}"))
357
363
  metric_return_datatype: INT
358
364
  max:
359
- metric_query: MAX(DATALENGTH("{{ col_name }}"))
365
+ metric_query: MAX(LEN("{{ col_name }}"))
360
366
  metric_return_datatype: INT
361
367
  avg:
362
- metric_query: AVG(CAST(DATALENGTH("{{ col_name }}") AS FLOAT))
368
+ metric_query: AVG(CAST(LEN("{{ col_name }}") AS FLOAT))
363
369
  metric_return_datatype: FLOAT
364
370
  count_empty:
365
- metric_query: SUM(CASE WHEN DATALENGTH("{{ col_name }}") = 0 THEN 1 ELSE 0 END)
371
+ metric_query: SUM(CASE WHEN LEN("{{ col_name }}") = 0 THEN 1 ELSE 0 END)
366
372
  metric_return_datatype: INT
367
373
  count_distinct:
368
374
  metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}CAST('|' + "{{ col_name }}" + '|' AS VARCHAR(MAX)){{ measure_collation_suffix }})
@@ -382,7 +388,7 @@ NCHAR:
382
388
  metric_query: AVG(CAST(LEN(RTRIM("{{ col_name }}")) AS FLOAT))
383
389
  metric_return_datatype: FLOAT
384
390
  count_empty:
385
- metric_query: SUM(CASE WHEN RTRIM("{{ col_name }}") = '' THEN 1 ELSE 0 END)
391
+ metric_query: SUM(CASE WHEN LEN(RTRIM("{{ col_name }}")) = 0 THEN 1 ELSE 0 END)
386
392
  metric_return_datatype: INT
387
393
  count_distinct:
388
394
  metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}RTRIM("{{ col_name }}"){{ measure_collation_suffix }})
@@ -392,6 +398,9 @@ NCHAR:
392
398
  metric_return_datatype: INT
393
399
 
394
400
  NVARCHAR:
401
+ # As VARCHAR above (SNOW-4292391). count_empty uses the same LEN, so ' ' is empty
402
+ # here and in Snowflake's LENGTH(RTRIM()) = 0; comparing to an empty literal matched
403
+ # it on this side only.
395
404
  min:
396
405
  metric_query: MIN(LEN("{{ col_name }}"))
397
406
  metric_return_datatype: INT
@@ -402,7 +411,7 @@ NVARCHAR:
402
411
  metric_query: AVG(CAST(LEN("{{ col_name }}") AS FLOAT))
403
412
  metric_return_datatype: FLOAT
404
413
  count_empty:
405
- metric_query: SUM(CASE WHEN "{{ col_name }}" = '' THEN 1 ELSE 0 END)
414
+ metric_query: SUM(CASE WHEN LEN("{{ col_name }}") = 0 THEN 1 ELSE 0 END)
406
415
  metric_return_datatype: INT
407
416
  count_distinct:
408
417
  metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}CAST(N'|' + CAST("{{ col_name }}" AS NVARCHAR(MAX)) + N'|' AS NVARCHAR(MAX)){{ measure_collation_suffix }})
@@ -474,15 +483,17 @@ SMALLDATETIME:
474
483
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
475
484
  metric_return_datatype: INT
476
485
 
486
+ # MIN/MAX in UTC: the row they return keeps its own offset, so the same instant
487
+ # would differ by offset. Snowflake TIMESTAMP_TZ pairs with TIMESTAMP_TZ_UTC.
477
488
  DATETIMEOFFSET:
478
489
  min:
479
490
  metric_query: MIN("{{ col_name }}")
480
491
  metric_return_datatype: DATETIMEOFFSET
481
- metric_normalization: LEFT(FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000' + FORMAT({{ metric_query }}, 'zzz')
492
+ metric_normalization: LEFT(FORMAT(SWITCHOFFSET({{ metric_query }}, '+00:00'), 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000+00:00'
482
493
  max:
483
494
  metric_query: MAX("{{ col_name }}")
484
495
  metric_return_datatype: DATETIMEOFFSET
485
- metric_normalization: LEFT(FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000' + FORMAT({{ metric_query }}, 'zzz')
496
+ metric_normalization: LEFT(FORMAT(SWITCHOFFSET({{ metric_query }}, '+00:00'), 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000+00:00'
486
497
  count_null:
487
498
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
488
499
  metric_return_datatype: INT
@@ -0,0 +1,71 @@
1
+ # Numerics and dates use native CONVERT/CAST, not FORMAT(): FORMAT runs through the .NET
2
+ # CLR and is the dominant per-row cost of the row hash. Each expression emits the same text
3
+ # FORMAT did. Style 121 always prints 7 fraction digits (126 drops a zero fraction); STUFF
4
+ # swaps its space for 'T'. DATETIME goes through DATETIME2(3) so its 1/300 s ticks print as
5
+ # the millisecond FORMAT showed. DECIMAL/NUMERIC convert at the column's own scale, then pad the
6
+ # text to the comparison scale; widening to DECIMAL(38, comparison_scale) can overflow valid values.
7
+ # The padding counts the digits CONVERT printed instead of trusting the column's type string:
8
+ # DMO hands a bare DECIMAL the cross-side scale (DECIMAL(18,6) -> NUMBER(20,10) arrives as
9
+ # DECIMAL(18, 10)), which would pad nothing. LEFT('.', s) adds the point to a scale-0 value
10
+ # only when s > 0; ISNULL keeps an unpaddable value as printed, and a NULL column stays NULL.
11
+ # Money widens only to its native precision because CONVERT(VARCHAR, money) keeps 2 dp.
12
+ # Azure Synapse datatype normalization templates.
13
+ # Each entry maps a Synapse type (uppercase) to a SQL expression that normalizes
14
+ # the column value to a canonical string for hashing.
15
+ # Use {{ col_name }} as the column placeholder; the query generator will substitute
16
+ # the actual quoted column name at render time.
17
+ #
18
+ # These templates MUST produce identical string representations to the Snowflake
19
+ # normalization templates so that MD5 hashes match during row validation.
20
+ # Mirrors sqlserver_datatypes_normalization_templates.yaml with IIF replaced by
21
+ # CASE WHEN (IIF is unsupported on Synapse Dedicated SQL Pool).
22
+
23
+ # ---- Numeric types ----
24
+ BIGINT: CONVERT(VARCHAR(20), "{{ col_name }}")
25
+ INT: CONVERT(VARCHAR(20), "{{ col_name }}")
26
+ SMALLINT: CONVERT(VARCHAR(20), "{{ col_name }}")
27
+ TINYINT: CONVERT(VARCHAR(20), "{{ col_name }}")
28
+ DECIMAL: CONVERT(VARCHAR(64), "{{ col_name }}") + ISNULL(CASE WHEN CHARINDEX('.', CONVERT(VARCHAR(64), "{{ col_name }}")) = 0 THEN LEFT('.', {{ numeric_scale }}) + REPLICATE('0', {{ numeric_scale }}) ELSE REPLICATE('0', {{ numeric_scale }} + CHARINDEX('.', CONVERT(VARCHAR(64), "{{ col_name }}")) - LEN(CONVERT(VARCHAR(64), "{{ col_name }}"))) END, '')
29
+ NUMERIC: CONVERT(VARCHAR(64), "{{ col_name }}") + ISNULL(CASE WHEN CHARINDEX('.', CONVERT(VARCHAR(64), "{{ col_name }}")) = 0 THEN LEFT('.', {{ numeric_scale }}) + REPLICATE('0', {{ numeric_scale }}) ELSE REPLICATE('0', {{ numeric_scale }} + CHARINDEX('.', CONVERT(VARCHAR(64), "{{ col_name }}")) - LEN(CONVERT(VARCHAR(64), "{{ col_name }}"))) END, '')
30
+ MONEY: CONVERT(VARCHAR(64), CAST("{{ col_name }}" AS DECIMAL(19, 4))) + '{{ numeric_scale_padding }}'
31
+ SMALLMONEY: CONVERT(VARCHAR(64), CAST("{{ col_name }}" AS DECIMAL(10, 4))) + '{{ numeric_scale_padding }}'
32
+ FLOAT: '{{ float_bit_shim }}'
33
+ REAL: '{{ float_bit_shim }}'
34
+
35
+ # ---- Boolean type ----
36
+ BIT: CASE WHEN "{{ col_name }}" = 1 THEN 'TRUE' WHEN "{{ col_name }}" = 0 THEN 'FALSE' END
37
+
38
+ # ---- Character types ----
39
+ CHAR: RTRIM("{{ col_name }}")
40
+ VARCHAR: '"{{ col_name }}"'
41
+ NCHAR: RTRIM("{{ col_name }}")
42
+ NVARCHAR: '"{{ col_name }}"'
43
+
44
+ # ---- Date / Time types ----
45
+ # DATETIME keeps 7 fractional digits + '00' pad to FF9.
46
+ # DATETIME2 / DATETIMEOFFSET: Snowflake TIMESTAMP_* stores microseconds. FORMAT
47
+ # '.fffffff' keeps the 7th digit (e.g. .999999900) while Snowflake TO_CHAR FF9
48
+ # emits .999999000 for the truncated mirror. Truncate to 6 fractional digits
49
+ # then pad '000' so hashes match ODBC/microsecond storage. LEFT keeps NULL.
50
+ # Use '+' (not CONCAT) so a NULL input propagates to NULL.
51
+ # DATENAME(TZOFFSET) emits '+HH:MM'/'-HH:MM' for every offset, including UTC.
52
+ DATE: CONVERT(VARCHAR(10), "{{ col_name }}", 23)
53
+ TIME: CONVERT(VARCHAR(8), "{{ col_name }}", 108)
54
+ DATETIME: STUFF(CONVERT(VARCHAR(27), CAST(CAST("{{ col_name }}" AS DATETIME2(3)) AS DATETIME2(7)), 121), 11, 1, 'T') + '00'
55
+ DATETIME2: LEFT(STUFF(CONVERT(VARCHAR(27), CAST("{{ col_name }}" AS DATETIME2(7)), 121), 11, 1, 'T'), 26) + '000'
56
+ SMALLDATETIME: CONVERT(VARCHAR(19), "{{ col_name }}", 126) + '.000000000'
57
+ DATETIMEOFFSET: LEFT(STUFF(CONVERT(VARCHAR(27), CAST("{{ col_name }}" AS DATETIME2(7)), 121), 11, 1, 'T'), 26) + '000' + DATENAME(TZOFFSET, "{{ col_name }}")
58
+
59
+ # ---- Binary types ----
60
+ BINARY: UPPER(CONVERT(VARCHAR(MAX), "{{ col_name }}", 2))
61
+ VARBINARY: UPPER(CONVERT(VARCHAR(MAX), "{{ col_name }}", 2))
62
+
63
+ # ---- Other types ----
64
+ # Azure Synapse dedicated SQL pool always normalizes UNIQUEIDENTIFIER hex digits
65
+ # to uppercase regardless of input casing. Use UPPER so the canonical string
66
+ # matches the DV cases and Snowflake's VARCHAR-based representation.
67
+ UNIQUEIDENTIFIER: UPPER(CONVERT(VARCHAR(36), "{{ col_name }}"))
68
+ SYSNAME: CONVERT(VARCHAR(128), "{{ col_name }}")
69
+
70
+ # ---- Default fallback ----
71
+ DEFAULT: CONVERT(VARCHAR(MAX), "{{ col_name }}")
@@ -1,32 +1,32 @@
1
1
  {% import 'query_modifiers.sql.j2' as qm with context %}
2
2
  {{ qm.locking_prefix(query_modifiers) }}SELECT
3
3
  {% for index_column in index_column_collection %}
4
- {{ (index_column.name ~ '_IDX') | tsql_quote_identifier }} AS {{ index_column.name | tsql_quote_identifier }},
4
+ {{ index_sql_aliases[index_column.name] }} AS {{ column_sql_names[index_column.name] }},
5
5
  {% endfor %}
6
6
  UPPER(CONVERT(VARCHAR(32), HASHBYTES('MD5',
7
7
  {% if use_column_groups %}
8
8
  {% for group in column_groups %}
9
9
  {% if not loop.first %} + {% endif %}
10
10
  UPPER(CONVERT(VARCHAR(32), HASHBYTES('MD5', CAST(CONCAT(CAST('' AS VARCHAR(MAX)){{ row_hash_collation_suffix }},
11
- {% for col in group %}{{ col.name | tsql_quote_identifier }}{{ row_hash_collation_suffix }}{% if not loop.last %}, '{{ row_hash_column_delimiter }}'{{ row_hash_collation_suffix }}, {% endif %}{% endfor %}
11
+ {% for col in group %}{{ column_sql_names[col.name] }}{{ row_hash_collation_suffix }}{% if not loop.last %}, '{{ row_hash_column_delimiter }}'{{ row_hash_collation_suffix }}, {% endif %}{% endfor %}
12
12
  ) AS VARCHAR(MAX))), 2))
13
13
  {% endfor %}
14
14
  {% elif column_collection|length > 1 %}
15
- CAST(CONCAT(CAST('' AS VARCHAR(MAX)){{ row_hash_collation_suffix }}, {% for column in column_collection %}{{ column.name | tsql_quote_identifier }}{{ row_hash_collation_suffix }}{% if not loop.last %}, '{{ row_hash_column_delimiter }}'{{ row_hash_collation_suffix }}, {% endif %}{% endfor %}) AS VARCHAR(MAX))
15
+ CAST(CONCAT(CAST('' AS VARCHAR(MAX)){{ row_hash_collation_suffix }}, {% for column in column_collection %}{{ column_sql_names[column.name] }}{{ row_hash_collation_suffix }}{% if not loop.last %}, '{{ row_hash_column_delimiter }}'{{ row_hash_collation_suffix }}, {% endif %}{% endfor %}) AS VARCHAR(MAX))
16
16
  {% else %}
17
- CAST({{ column_collection[0].name | tsql_quote_identifier }}{{ row_hash_collation_suffix }} AS VARCHAR(MAX))
17
+ CAST({{ column_sql_names[column_collection[0].name] }}{{ row_hash_collation_suffix }} AS VARCHAR(MAX))
18
18
  {% endif %}
19
19
  ), 2)) AS ROW_MD5
20
20
  FROM
21
21
  (SELECT{{ qm.render_select_modifier(query_modifiers, 'src') }}
22
22
  {% for index_column in index_column_collection %}
23
- {{ datatypes_normalization_renderer_templates[index_column.name] }} AS {{ (index_column.name ~ '_IDX') | tsql_quote_identifier }},
23
+ {{ datatypes_normalization_renderer_templates[index_column.name] }} AS {{ index_sql_aliases[index_column.name] }},
24
24
  {% endfor %}
25
25
  {% for column in column_collection %}
26
26
  {% if column.nullable %}
27
- coalesce({{ datatypes_normalization_renderer_templates[column.name] }}, '{{ null_hashing_sentinel }}') AS {{ column.name | tsql_quote_identifier }}{% if not loop.last %},{% endif %}
27
+ coalesce({{ datatypes_normalization_renderer_templates[column.name] }}, '{{ null_hashing_sentinel }}') AS {{ column_sql_names[column.name] }}{% if not loop.last %},{% endif %}
28
28
  {% else %}
29
- {{ datatypes_normalization_renderer_templates[column.name] }} AS {{ column.name | tsql_quote_identifier }}{% if not loop.last %},{% endif %}
29
+ {{ datatypes_normalization_renderer_templates[column.name] }} AS {{ column_sql_names[column.name] }}{% if not loop.last %},{% endif %}
30
30
  {% endif %}
31
31
  {% endfor %}
32
32
  {{ qm.render_from_clause(query_modifiers, fully_qualified_name, 'src') }}
@@ -34,5 +34,5 @@ FROM
34
34
  ) AS RW
35
35
  {% if order_by_columns %}
36
36
  {# T-SQL does not support the NULLS FIRST keyword; under ASC it already sorts NULLs first, matching NULL_KEY (sentinel sorts first) in the streaming merge-join. #}
37
- ORDER BY {% for c in order_by_columns %}{{ order_by_collation_expressions.get(c, (c ~ '_IDX') | tsql_quote_identifier) }}{% if not loop.last %}, {% endif %}{% endfor %}
37
+ ORDER BY {% for c in order_by_columns %}{{ order_by_collation_expressions.get(c, index_sql_aliases[c]) }}{% if not loop.last %}, {% endif %}{% endfor %}
38
38
  {% endif %}
@@ -17,6 +17,19 @@ WITH rc_cte AS (
17
17
  C.NUMERIC_SCALE AS NUMERIC_SCALE,
18
18
  C.COLLATION_NAME AS COLLATION_NAME,
19
19
  C.IS_NULLABLE AS IS_NULLABLE,
20
+ (
21
+ SELECT CASE TABLE_TYPE
22
+ WHEN 'BASE TABLE' THEN 'TABLE'
23
+ WHEN 'VIEW' THEN 'VIEW'
24
+ ELSE 'UNKNOWN'
25
+ END
26
+ FROM {% if object_database_ref %}{{ object_database_ref }}.{% endif %}INFORMATION_SCHEMA.TABLES
27
+ WHERE TABLE_NAME = '{{ object_name | escape_sql_literal }}'
28
+ AND TABLE_SCHEMA = '{{ object_schema | escape_sql_literal }}'
29
+ {% if object_database %}
30
+ AND TABLE_CATALOG = '{{ object_database | escape_sql_literal }}'
31
+ {% endif %}
32
+ ) AS OBJECT_TYPE,
20
33
  rc.ROW_COUNT
21
34
  FROM {% if object_database_ref %}{{ object_database_ref }}.{% endif %}INFORMATION_SCHEMA.COLUMNS C
22
35
  CROSS JOIN rc_cte rc
@@ -32,6 +32,8 @@ import logging
32
32
 
33
33
  from typing import TYPE_CHECKING
34
34
 
35
+ from shared.identifiers.managers import identifier_manager
36
+ from shared.identifiers.sql_identifier import SqlIdentifier
35
37
  from snowflake.snowflake_data_validation.query.float_bit_normalization import (
36
38
  build_binary64_canonical_expr,
37
39
  )
@@ -50,6 +52,7 @@ from snowflake.snowflake_data_validation.utils.constants import (
50
52
  )
51
53
  from snowflake.snowflake_data_validation.utils.measure_collation import (
52
54
  TSQL_ROW_HASH_COLLATION_SUFFIX,
55
+ tsql_comparison_collation_tokens,
53
56
  tsql_measure_collation_tokens,
54
57
  )
55
58
  from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
@@ -93,17 +96,20 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
93
96
  )
94
97
 
95
98
  def _comparison_collation_tokens(self, column) -> tuple[str, str]:
96
- return tsql_measure_collation_tokens(
97
- Platform.AZURE_SYNAPSE,
98
- column,
99
- "count_distinct",
100
- )
99
+ return tsql_comparison_collation_tokens(Platform.AZURE_SYNAPSE, column)
100
+
101
+ def _write_sql_identifier(self, identifier: str) -> str:
102
+ """Write a column name as Azure Synapse's identifier manager does: bracketed, valid whatever QUOTED_IDENTIFIER is."""
103
+ return identifier_manager(self.platform).write_sql_name(SqlIdentifier(identifier))
101
104
 
102
105
  def _float_column_reference(self, column) -> str:
103
106
  return self._write_sql_identifier(column.name)
104
107
 
105
- def _normalization_column_name(self, column) -> str:
106
- return str(column.name).replace('"', '""')
108
+ def _render_normalization_template_identifier(self, template: str, identifier: str) -> str:
109
+ return self._render_written_identifier_template(template, identifier)
110
+
111
+ def _render_metric_template_identifier(self, metric_template: str, identifier: str) -> str:
112
+ return self._render_written_identifier_template(metric_template, identifier)
107
113
 
108
114
  def build_float_bit_shim(self, column, col_ref: str) -> str:
109
115
  value_expr = float_bit_input_expr(
@@ -235,6 +241,7 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
235
241
  ),
236
242
  row_hash_collation_suffix=TSQL_ROW_HASH_COLLATION_SUFFIX,
237
243
  query_modifiers=resolve_table_context_modifiers(table_context),
244
+ write_identifier=self._write_sql_identifier,
238
245
  )
239
246
 
240
247
  def generate_cell_validation_data_query(
@@ -266,6 +273,7 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
266
273
  order_by_columns=order_by_columns,
267
274
  order_by_collation_expressions=self._order_by_collation_expressions(table_context.columns_to_validate),
268
275
  query_modifiers=resolve_table_context_modifiers(table_context),
276
+ write_identifier=self._write_sql_identifier,
269
277
  )
270
278
 
271
279
  def generate_extract_md5_rows_chunk_query(self, chunk_id: str, table_context: TableContext) -> str:
@@ -44,8 +44,10 @@ FLOAT: '{{ float_bit_shim }}'
44
44
  # NUMERIC/BIGNUMERIC map to Snowflake NUMBER, which renders scale-aware via
45
45
  # TO_CHAR(col, 'FM...0.00..0'). BigQuery mirrors that scale with the resolved
46
46
  # printf mask ``{{ numeric_format_mask }}`` (e.g. NUMBER(38,9) -> '%.9f'), so a
47
- # bounded BIGNUMERIC(p, s) that fits NUMBER hashes identically. (A bare
48
- # BIGNUMERIC (76, 38) cannot map to NUMBER and fails L1 before L2/L3.)
47
+ # bounded BIGNUMERIC(p, s) that fits NUMBER hashes identically. A bare
48
+ # BIGNUMERIC is created as DECFLOAT (SnowConvert engine parity); precision
49
+ # above 38 or scale above 37 reports as an L1 WARNING rather than a schema
50
+ # failure, and L2/L3 are not expected to reach parity on the extreme form.
49
51
  NUMERIC: FORMAT('{{ numeric_format_mask }}', `{{ col_name }}`)
50
52
  DECIMAL: FORMAT('{{ numeric_format_mask }}', `{{ col_name }}`)
51
53
  BIGNUMERIC: FORMAT('{{ numeric_format_mask }}', `{{ col_name }}`)
@@ -41,5 +41,5 @@ SELECT
41
41
  END AS scale,
42
42
  c.collation_name AS collation_name,
43
43
  -1 AS calculated_column_size_in_bytes
44
- FROM `{{ database_name }}`.`{{ schema_name }}`.INFORMATION_SCHEMA.COLUMNS c
44
+ FROM {{ database_sql }}.{{ schema_sql }}.INFORMATION_SCHEMA.COLUMNS c
45
45
  WHERE c.table_name = '{{ table_name | escape_sql_literal }}';
@@ -45,8 +45,17 @@ WITH rc_cte AS (
45
45
  END AS NUMERIC_SCALE,
46
46
  c.is_nullable AS IS_NULLABLE,
47
47
  c.collation_name AS COLLATION_NAME,
48
+ (
49
+ SELECT CASE table_type
50
+ WHEN 'BASE TABLE' THEN 'TABLE'
51
+ WHEN 'VIEW' THEN 'VIEW'
52
+ ELSE 'UNKNOWN'
53
+ END
54
+ FROM {{ object_database_sql }}.{{ object_schema_sql }}.INFORMATION_SCHEMA.TABLES
55
+ WHERE table_name = '{{ object_name | escape_sql_literal }}'
56
+ ) AS OBJECT_TYPE,
48
57
  rc.ROW_COUNT
49
- FROM `{{ object_database }}`.`{{ object_schema }}`.INFORMATION_SCHEMA.COLUMNS c
58
+ FROM {{ object_database_sql }}.{{ object_schema_sql }}.INFORMATION_SCHEMA.COLUMNS c
50
59
  CROSS JOIN rc_cte rc
51
60
  WHERE c.table_name = '{{ object_name | escape_sql_literal }}'
52
61
  {% if columns %}
@@ -6,6 +6,7 @@ from snowflake.snowflake_data_validation.configuration.model.configuration_model
6
6
  ConfigurationModel,
7
7
  )
8
8
  from snowflake.snowflake_data_validation.configuration.singleton import Singleton
9
+ from snowflake.snowflake_data_validation.utils.helpers.helper_io import HelperIO
9
10
 
10
11
 
11
12
  class ConfigurationLoader(metaclass=Singleton):
@@ -38,18 +39,17 @@ class ConfigurationLoader(metaclass=Singleton):
38
39
  raise ValueError("The configuration file path cannot be None value")
39
40
 
40
41
  if not (file_path.suffix == ".yaml" or file_path.suffix == ".yml"):
41
- raise Exception(
42
- "The configuration file must have a .yaml or .yml extension"
43
- )
42
+ raise Exception("The configuration file must have a .yaml or .yml extension")
44
43
 
45
44
  if not file_path.exists():
46
45
  raise FileNotFoundError(f"Configuration file not found in {file_path}")
47
46
 
47
+ # Outside the try: the encoding error is already actionable and must not
48
+ # be flattened into the generic "error occurred" wrapper below.
49
+ file_content = HelperIO.read_text_file(file_path)
50
+
48
51
  try:
49
- file_content = file_path.read_text()
50
- self.configuration_model = parse_yaml_raw_as(
51
- ConfigurationModel, file_content
52
- )
52
+ self.configuration_model = parse_yaml_raw_as(ConfigurationModel, file_content)
53
53
 
54
54
  except Exception as exception:
55
55
  error_msg = "An error occurred while loading the configuration file:"