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