snowflake-data-validation 1.23.1__tar.gz → 1.24.2__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 (525) hide show
  1. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/PKG-INFO +39 -1
  2. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/README.md +38 -0
  3. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +13 -13
  4. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +10 -2
  5. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +18 -25
  6. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +3 -0
  7. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +8 -8
  8. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +28 -2
  9. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +2 -0
  10. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +8 -8
  11. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +38 -5
  12. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +5 -3
  13. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/query/__init__.py +9 -1
  14. snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/query/charset_normalization.py +159 -0
  15. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +2 -2
  16. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +172 -8
  17. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +8 -7
  18. snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +48 -0
  19. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +104 -22
  20. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +3 -3
  21. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +5 -9
  22. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +4 -4
  23. snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +23 -0
  24. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +4 -1
  25. snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +47 -0
  26. snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +56 -0
  27. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +7 -1
  28. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +69 -7
  29. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +17 -14
  30. snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +4 -0
  31. snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +56 -0
  32. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +28 -2
  33. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +8 -6
  34. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +1 -1
  35. snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +60 -0
  36. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +1 -1
  37. snowflake_data_validation-1.24.2/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +193 -0
  38. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +28 -2
  39. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +7 -19
  40. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/constants.py +14 -6
  41. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +3 -2
  42. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +38 -17
  43. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/query/test_query_generator_redshift.py +87 -1
  44. snowflake_data_validation-1.24.2/tests/unit/Teradata/test_teradata_row_md5_select_template.py +136 -0
  45. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +2 -3
  46. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/oracle/test_oracle_normalization_templates.py +5 -5
  47. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/oracle/test_oracle_query_generator.py +1 -1
  48. snowflake_data_validation-1.24.2/tests/unit/sqlite/test_metadata_query_template_sqlite.py +242 -0
  49. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/sqlserver/test_sqlserver_row_queries.py +26 -7
  50. snowflake_data_validation-1.24.2/tests/unit/test_boolean_binary_canonical_templates.py +91 -0
  51. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_cell_validation_query_generation.py +17 -0
  52. snowflake_data_validation-1.24.2/tests/unit/test_charset_normalization.py +264 -0
  53. snowflake_data_validation-1.24.2/tests/unit/test_float_canonical_templates.py +60 -0
  54. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_postgresql_normalization_templates.py +2 -2
  55. snowflake_data_validation-1.24.2/tests/unit/test_query_generator_numeric_scale.py +115 -0
  56. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_snowflake_binary_normalization_templates.py +5 -5
  57. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_sql_catalog_template_guard.py +8 -0
  58. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_sqlserver_multi_version_support.py +35 -0
  59. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_table_configuration.py +40 -0
  60. snowflake_data_validation-1.23.1/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -14
  61. snowflake_data_validation-1.23.1/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -24
  62. snowflake_data_validation-1.23.1/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -3
  63. snowflake_data_validation-1.23.1/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -55
  64. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/.gitignore +0 -0
  65. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/LICENSE +0 -0
  66. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/docs/README.md +0 -0
  67. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/pyproject.toml +0 -0
  68. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
  69. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/__main__.py +0 -0
  70. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
  71. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
  72. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_cli.py +0 -0
  73. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
  74. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
  75. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
  76. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
  77. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
  78. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
  79. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
  80. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
  81. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
  82. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
  83. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
  84. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
  85. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
  86. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
  87. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
  88. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
  89. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
  90. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/common_cli/cli_partitioning.py +0 -0
  91. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/common_cli/cli_sync_validation.py +0 -0
  92. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
  93. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
  94. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
  95. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
  96. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
  97. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
  98. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
  99. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
  100. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
  101. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
  102. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
  103. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
  104. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
  105. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
  106. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
  107. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
  108. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
  109. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
  110. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
  111. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
  112. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
  113. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
  114. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
  115. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
  116. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/main_cli.py +0 -0
  117. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
  118. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
  119. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
  120. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
  121. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
  122. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
  123. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
  124. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
  125. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +0 -0
  126. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
  127. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
  128. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
  129. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
  130. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
  131. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/orchestration/console_progress_reporter.py +0 -0
  132. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
  133. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
  134. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
  135. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
  136. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
  137. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
  138. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
  139. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
  140. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
  141. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
  142. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
  143. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
  144. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
  145. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
  146. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
  147. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
  148. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
  149. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
  150. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
  151. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
  152. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
  153. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
  154. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
  155. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/postgresql_cli.py +0 -0
  156. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
  157. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
  158. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
  159. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
  160. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
  161. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
  162. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
  163. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
  164. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
  165. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
  166. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
  167. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
  168. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
  169. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
  170. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
  171. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
  172. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
  173. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
  174. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
  175. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
  176. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
  177. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
  178. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
  179. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
  180. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
  181. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
  182. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
  183. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
  184. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
  185. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
  186. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
  187. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
  188. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
  189. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
  190. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
  191. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
  192. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
  193. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
  194. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
  195. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
  196. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
  197. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
  198. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
  199. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
  200. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
  201. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
  202. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
  203. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
  204. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
  205. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
  206. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
  207. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
  208. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
  209. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
  210. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
  211. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
  212. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
  213. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
  214. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
  215. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
  216. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  217. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
  218. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
  219. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
  220. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
  221. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
  222. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
  223. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
  224. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
  225. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -0
  226. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
  227. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
  228. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
  229. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
  230. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
  231. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/redshift_cli.py +0 -0
  232. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
  233. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
  234. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
  235. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
  236. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
  237. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
  238. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
  239. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
  240. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
  241. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
  242. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
  243. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
  244. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
  245. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
  246. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
  247. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +0 -0
  248. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
  249. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
  250. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
  251. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
  252. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
  253. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
  254. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
  255. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
  256. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
  257. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
  258. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
  259. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
  260. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
  261. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
  262. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
  263. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
  264. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/snowflake/snowflake_cli.py +0 -0
  265. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
  266. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
  267. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
  268. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
  269. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
  270. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
  271. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
  272. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
  273. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
  274. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
  275. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
  276. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
  277. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
  278. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
  279. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
  280. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
  281. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
  282. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
  283. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
  284. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
  285. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
  286. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
  287. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
  288. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
  289. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
  290. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
  291. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
  292. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
  293. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
  294. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
  295. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
  296. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
  297. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
  298. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
  299. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
  300. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
  301. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
  302. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
  303. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
  304. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
  305. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
  306. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_cli.py +0 -0
  307. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
  308. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
  309. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
  310. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
  311. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
  312. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
  313. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
  314. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
  315. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
  316. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
  317. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
  318. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
  319. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
  320. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
  321. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
  322. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
  323. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
  324. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
  325. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
  326. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
  327. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
  328. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/teradata_cli.py +0 -0
  329. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +0 -0
  330. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
  331. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
  332. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
  333. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
  334. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
  335. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
  336. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
  337. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
  338. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
  339. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
  340. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
  341. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
  342. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
  343. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
  344. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
  345. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
  346. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
  347. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
  348. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
  349. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
  350. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
  351. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
  352. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +0 -0
  353. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
  354. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
  355. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
  356. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
  357. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
  358. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +0 -0
  359. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
  360. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
  361. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
  362. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
  363. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
  364. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
  365. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
  366. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
  367. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
  368. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
  369. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
  370. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
  371. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
  372. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +0 -0
  373. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
  374. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
  375. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
  376. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
  377. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
  378. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
  379. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
  380. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
  381. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
  382. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
  383. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
  384. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
  385. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
  386. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
  387. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
  388. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/.coveragerc +0 -0
  389. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/conftest.py +0 -0
  390. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/integration/.coveragerc +0 -0
  391. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
  392. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/integration/test_async_generation_integration.py +0 -0
  393. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/integration/test_async_validation_integration.py +0 -0
  394. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/integration/test_reference_integration.py +0 -0
  395. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/integration/test_source_validation_integration.py +0 -0
  396. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/integration/test_sync_validation_integration.py +0 -0
  397. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/cli/test_redshift_cli_general.py +0 -0
  398. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/cli/test_redshift_cli_generate_validation_scripts.py +0 -0
  399. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/cli/test_redshift_cli_get_configuration_files.py +0 -0
  400. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/cli/test_redshift_cli_run_async_validation.py +0 -0
  401. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/cli/test_redshift_cli_run_validation.py +0 -0
  402. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/cli/test_redshift_cli_run_validation_ipc.py +0 -0
  403. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
  404. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
  405. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/test_connector_redshift.py +0 -0
  406. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
  407. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Teradata/test_connector_teradata.py +0 -0
  408. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
  409. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
  410. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/Teradata/test_teradata_cli.py +0 -0
  411. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/__init__.py +0 -0
  412. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
  413. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
  414. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
  415. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
  416. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
  417. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
  418. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
  419. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
  420. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
  421. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
  422. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
  423. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
  424. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
  425. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
  426. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
  427. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/azure_synapse/__init__.py +0 -0
  428. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
  429. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
  430. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
  431. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
  432. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
  433. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
  434. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/oracle/__init__.py +0 -0
  435. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
  436. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
  437. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
  438. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
  439. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
  440. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/sqlite/__init__.py +0 -0
  441. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
  442. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
  443. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
  444. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
  445. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
  446. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/sqlserver/__init__.py +0 -0
  447. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_accepted_transformation.py +0 -0
  448. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_arguments_manager_base.py +0 -0
  449. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_arguments_manager_factory.py +0 -0
  450. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_batched_metrics_queries.py +0 -0
  451. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_cell_data_validator.py +0 -0
  452. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_column_grouping.py +0 -0
  453. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_column_metadata.py +0 -0
  454. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_column_partitioning_strategy.py +0 -0
  455. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_comparison_codec.py +0 -0
  456. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_comparison_orchestrator.py +0 -0
  457. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_configuration_file_editor.py +0 -0
  458. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_configuration_file_synchronizer.py +0 -0
  459. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_configuration_loader.py +0 -0
  460. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_configuration_model.py +0 -0
  461. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_connection_pool.py +0 -0
  462. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_connector_failure_tracker.py +0 -0
  463. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_connector_snowflake.py +0 -0
  464. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_console_progress_reporter.py +0 -0
  465. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_cpu_optimizer.py +0 -0
  466. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_custom_templates_models.py +0 -0
  467. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_data_validator.py +0 -0
  468. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_escape_odbc_value.py +0 -0
  469. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_executor_factory.py +0 -0
  470. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_get_configuration_file.py +0 -0
  471. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_helper_dataframe.py +0 -0
  472. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_helper_polars_cast.py +0 -0
  473. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_helpers.py +0 -0
  474. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_html_report_builder.py +0 -0
  475. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_index_key_format.py +0 -0
  476. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_internal_helpers.py +0 -0
  477. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_iso_dv_common.py +0 -0
  478. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_logging_config.py +0 -0
  479. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_metrics_reshape.py +0 -0
  480. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_metrics_result_shape.py +0 -0
  481. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_metrics_templates_casts.py +0 -0
  482. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_platform_bridge.py +0 -0
  483. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_postgresql_tz_normalization.py +0 -0
  484. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_query_cell_level_validation.py +0 -0
  485. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_query_metrics_level_validation.py +0 -0
  486. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_query_to_dataframe.py +0 -0
  487. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_query_validator.py +0 -0
  488. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_report_metadata.py +0 -0
  489. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_result_set_cell_level_validation.py +0 -0
  490. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
  491. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_result_set_snapshot_generation.py +0 -0
  492. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_result_set_snapshot_validation.py +0 -0
  493. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_result_set_to_dataframe.py +0 -0
  494. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_result_set_validator.py +0 -0
  495. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_row_data_validator.py +0 -0
  496. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_row_partitioning_strategy.py +0 -0
  497. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_row_validation_report_buffer.py +0 -0
  498. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_shutdown_coordinator.py +0 -0
  499. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_snapshot_validation_statements.py +0 -0
  500. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_snowflake_arguments_manager.py +0 -0
  501. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_snowflake_cli.py +0 -0
  502. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_source_validation_executor.py +0 -0
  503. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_sql_literal_jinja_filter.py +0 -0
  504. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_sqlite_validation_connection.py +0 -0
  505. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
  506. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_sqlserver_cli.py +0 -0
  507. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_table_column_metadata_model.py +0 -0
  508. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_table_context.py +0 -0
  509. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_table_metadata_processor.py +0 -0
  510. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_table_snapshot_generation.py +0 -0
  511. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_table_snapshot_validation.py +0 -0
  512. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_target_platform_factory.py +0 -0
  513. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_telemetry.py +0 -0
  514. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_templates_loader_manager.py +0 -0
  515. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_teradata_iso_normalization.py +0 -0
  516. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_timestamp_golden_vectors.py +0 -0
  517. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_validation_configuration.py +0 -0
  518. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_validation_database_connection.py +0 -0
  519. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_validation_execution_context.py +0 -0
  520. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_validation_progress_reporter.py +0 -0
  521. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_validation_report_buffer.py +0 -0
  522. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_validation_report_status.py +0 -0
  523. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/test_view_configuration.py +0 -0
  524. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/utils/__init__.py +0 -0
  525. {snowflake_data_validation-1.23.1 → snowflake_data_validation-1.24.2}/tests/unit/utils/test_constants.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-data-validation
3
- Version: 1.23.1
3
+ Version: 1.24.2
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/
@@ -129,6 +129,8 @@ pip install "snowflake-data-validation[sqlite]"
129
129
 
130
130
  > **SQLite prerequisite:** This extra installs [sqlean.py](https://github.com/nalgeon/sqlean), a drop-in `sqlite3` replacement that bundles the [sqlean-crypto](https://github.com/nalgeon/sqlean/blob/main/docs/crypto.md) extension. The `crypto_md5` function provided by this extension is required for row-level MD5 computation during SQLite data validation. Wheels are available for **Linux and macOS** only; Windows is not supported by `sqlean.py`.
131
131
 
132
+ > **Teradata L3 prerequisite:** Hybrid row validation on Teradata requires a **`HASH_MD5` UDF** installed in the **same database** as the Teradata connection default (the database the worker uses when it connects). Generated SQL calls `HASH_MD5(...)` without qualification; pointing at a UDF in another database is not supported. See [teradata-dv-prerequisites.md](../docs/data-migration-orchestrator/teradata-dv-prerequisites.md) in this repo.
133
+
132
134
  For development and testing:
133
135
 
134
136
  ```bash
@@ -216,6 +218,42 @@ For complete command reference, configuration options, and examples, see the [Da
216
218
 
217
219
  ## Changelog
218
220
 
221
+ ### v1.24.2
222
+
223
+ **New features**
224
+
225
+ - Added character set normalization foundation for cross-platform encoding validation.
226
+
227
+ **Improvements**
228
+
229
+ - Improved float canonical rendering to full precision for L2/L3 validation.
230
+ - Improved numeric canonical rendering with scale-aware handling for T-SQL and Snowflake.
231
+ - Added query modifier support for SQL Server and Synapse.
232
+
233
+ **Bug fixes**
234
+
235
+ - Fixed Teradata L3 row-hash computation.
236
+
237
+ ### v1.24.1
238
+
239
+ **New features**
240
+
241
+ - Added charset normalization foundation for cross-platform character encoding validation.
242
+ - Added scale-aware numeric canonical rendering for T-SQL and Snowflake.
243
+ - Added query modifier support for SQL Server and Synapse.
244
+
245
+ **Improvements**
246
+
247
+ - Improved float canonical rendering to full precision for L2/L3 validation.
248
+
249
+ **Bug fixes**
250
+
251
+ - Fixed Teradata L3 row-hash computation.
252
+
253
+ ### v1.24.0
254
+
255
+ No user-facing changes in this release.
256
+
219
257
  ### v1.23.1
220
258
 
221
259
  **New features**
@@ -43,6 +43,8 @@ pip install "snowflake-data-validation[sqlite]"
43
43
 
44
44
  > **SQLite prerequisite:** This extra installs [sqlean.py](https://github.com/nalgeon/sqlean), a drop-in `sqlite3` replacement that bundles the [sqlean-crypto](https://github.com/nalgeon/sqlean/blob/main/docs/crypto.md) extension. The `crypto_md5` function provided by this extension is required for row-level MD5 computation during SQLite data validation. Wheels are available for **Linux and macOS** only; Windows is not supported by `sqlean.py`.
45
45
 
46
+ > **Teradata L3 prerequisite:** Hybrid row validation on Teradata requires a **`HASH_MD5` UDF** installed in the **same database** as the Teradata connection default (the database the worker uses when it connects). Generated SQL calls `HASH_MD5(...)` without qualification; pointing at a UDF in another database is not supported. See [teradata-dv-prerequisites.md](../docs/data-migration-orchestrator/teradata-dv-prerequisites.md) in this repo.
47
+
46
48
  For development and testing:
47
49
 
48
50
  ```bash
@@ -130,6 +132,42 @@ For complete command reference, configuration options, and examples, see the [Da
130
132
 
131
133
  ## Changelog
132
134
 
135
+ ### v1.24.2
136
+
137
+ **New features**
138
+
139
+ - Added character set normalization foundation for cross-platform encoding validation.
140
+
141
+ **Improvements**
142
+
143
+ - Improved float canonical rendering to full precision for L2/L3 validation.
144
+ - Improved numeric canonical rendering with scale-aware handling for T-SQL and Snowflake.
145
+ - Added query modifier support for SQL Server and Synapse.
146
+
147
+ **Bug fixes**
148
+
149
+ - Fixed Teradata L3 row-hash computation.
150
+
151
+ ### v1.24.1
152
+
153
+ **New features**
154
+
155
+ - Added charset normalization foundation for cross-platform character encoding validation.
156
+ - Added scale-aware numeric canonical rendering for T-SQL and Snowflake.
157
+ - Added query modifier support for SQL Server and Synapse.
158
+
159
+ **Improvements**
160
+
161
+ - Improved float canonical rendering to full precision for L2/L3 validation.
162
+
163
+ **Bug fixes**
164
+
165
+ - Fixed Teradata L3 row-hash computation.
166
+
167
+ ### v1.24.0
168
+
169
+ No user-facing changes in this release.
170
+
133
171
  ### v1.23.1
134
172
 
135
173
  **New features**
@@ -10,19 +10,19 @@
10
10
  # CASE WHEN (IIF is unsupported on Synapse Dedicated SQL Pool).
11
11
 
12
12
  # ---- Numeric types ----
13
- BIGINT: FORMAT("{{ col_name }}", '0.0000')
14
- INT: FORMAT("{{ col_name }}", '0.0000')
15
- SMALLINT: FORMAT("{{ col_name }}", '0.0000')
16
- TINYINT: FORMAT("{{ col_name }}", '0.0000')
17
- DECIMAL: FORMAT("{{ col_name }}", '0.0000')
18
- NUMERIC: FORMAT("{{ col_name }}", '0.0000')
19
- MONEY: FORMAT(ROUND(CAST("{{ col_name }}" AS DECIMAL(38, 4)), 0), '0.0000')
20
- SMALLMONEY: FORMAT(ROUND(CAST("{{ col_name }}" AS DECIMAL(38, 4)), 0), '0.0000')
21
- FLOAT: FORMAT("{{ col_name }}", '0.0000')
22
- REAL: FORMAT("{{ col_name }}", '0.0000')
13
+ BIGINT: FORMAT("{{ col_name }}", '{{ numeric_format_mask }}')
14
+ INT: FORMAT("{{ col_name }}", '{{ numeric_format_mask }}')
15
+ SMALLINT: FORMAT("{{ col_name }}", '{{ numeric_format_mask }}')
16
+ TINYINT: FORMAT("{{ col_name }}", '{{ numeric_format_mask }}')
17
+ DECIMAL: FORMAT("{{ col_name }}", '{{ numeric_format_mask }}')
18
+ NUMERIC: FORMAT("{{ col_name }}", '{{ numeric_format_mask }}')
19
+ MONEY: FORMAT("{{ col_name }}", '{{ numeric_format_mask }}')
20
+ SMALLMONEY: FORMAT("{{ col_name }}", '{{ numeric_format_mask }}')
21
+ FLOAT: '{{ float_tme_shim }}'
22
+ REAL: '{{ float_tme_shim }}'
23
23
 
24
24
  # ---- Boolean type ----
25
- BIT: CASE WHEN "{{ col_name }}" = 1 THEN 'true' ELSE 'false' END
25
+ BIT: CASE WHEN "{{ col_name }}" = 1 THEN 'TRUE' WHEN "{{ col_name }}" = 0 THEN 'FALSE' END
26
26
 
27
27
  # ---- Character types ----
28
28
  # TRIM aligns fixed-width CHAR/NCHAR padding and trailing VARCHAR spaces with Snowflake.
@@ -43,8 +43,8 @@ SMALLDATETIME: FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.000000000')
43
43
  DATETIMEOFFSET: FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00' + FORMAT("{{ col_name }}", 'zzz')
44
44
 
45
45
  # ---- Binary types ----
46
- BINARY: CONVERT(VARCHAR(MAX), "{{ col_name }}", 2)
47
- VARBINARY: CONVERT(VARCHAR(MAX), "{{ col_name }}", 2)
46
+ BINARY: UPPER(CONVERT(VARCHAR(MAX), "{{ col_name }}", 2))
47
+ VARBINARY: UPPER(CONVERT(VARCHAR(MAX), "{{ col_name }}", 2))
48
48
 
49
49
  # ---- Other types ----
50
50
  UNIQUEIDENTIFIER: LOWER(CONVERT(VARCHAR(36), "{{ col_name }}"))
@@ -34,8 +34,10 @@ from snowflake.snowflake_data_validation.query.query_generator_base import (
34
34
  QueryGeneratorBase,
35
35
  resolve_table_context_modifiers,
36
36
  )
37
+ from snowflake.snowflake_data_validation.sqlserver.query.query_generator_sqlserver import (
38
+ build_sqlserver_float_tme_shim,
39
+ )
37
40
  from snowflake.snowflake_data_validation.utils.constants import (
38
- COL_NAME_NO_QUOTES_PLACEHOLDER,
39
41
  Platform,
40
42
  )
41
43
  from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
@@ -57,6 +59,12 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
57
59
  """Initialize the Azure Synapse query generator."""
58
60
  super().__init__(platform=Platform.AZURE_SYNAPSE)
59
61
 
62
+ def _float_column_reference(self, column) -> str:
63
+ return f'"{column.name}"'
64
+
65
+ def build_float_tme_shim(self, column, col_ref: str) -> str:
66
+ return build_sqlserver_float_tme_shim(col_ref)
67
+
60
68
  def _resolve_normalization_templates(self, table_context: TableContext) -> dict[str, str]:
61
69
  """Build a ``{column_name: rendered_expression}`` mapping.
62
70
 
@@ -76,7 +84,7 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
76
84
  normalization_template = datatypes_normalization_templates.get("DEFAULT")
77
85
  if normalization_template is None:
78
86
  raise ValueError(f"No normalization template found for data type {column.data_type} and no DEFAULT template available.")
79
- rendered[column.name] = normalization_template.replace(COL_NAME_NO_QUOTES_PLACEHOLDER, column.name)
87
+ rendered[column.name] = self._render_normalization_template(normalization_template, column)
80
88
  return rendered
81
89
 
82
90
  def generate_row_md5_select_query(
@@ -118,27 +118,19 @@ class TableConfiguration(BaseModel):
118
118
  def _load_source_decomposed_fully_qualified_name(self) -> None:
119
119
  self.fully_qualified_name = self.fully_qualified_name.replace('\\"', '"')
120
120
 
121
- decomposed_tuple = Helper.get_decomposed_fully_qualified_name(
122
- self.fully_qualified_name
123
- )
121
+ decomposed_tuple = Helper.get_decomposed_fully_qualified_name(self.fully_qualified_name)
124
122
 
125
123
  self.source_database = decomposed_tuple[0]
126
124
  self.source_schema = decomposed_tuple[1]
127
125
  self.source_table = decomposed_tuple[2]
128
126
 
129
- def _load_target_fully_qualified_name(
130
- self, target_platform: Platform | None = None
131
- ) -> None:
132
- target_capability = TargetPlatformFactory.create(
133
- target_platform or Platform.SNOWFLAKE
134
- )
127
+ def _load_target_fully_qualified_name(self, target_platform: Platform | None = None) -> None:
128
+ target_capability = TargetPlatformFactory.create(target_platform or Platform.SNOWFLAKE)
135
129
  normalize = target_capability.normalize_target_identifier
136
130
  self.target_database = normalize(self.target_database or self.source_database)
137
131
  self.target_schema = normalize(self.target_schema or self.source_schema)
138
132
  self.target_name = normalize(self.target_name or self.source_table)
139
- self.target_fully_qualified_name = (
140
- f"{self.target_database}.{self.target_schema}.{self.target_name}"
141
- )
133
+ self.target_fully_qualified_name = f"{self.target_database}.{self.target_schema}.{self.target_name}"
142
134
 
143
135
  def _set_has_where_clause(self) -> None:
144
136
  self.has_where_clause = self.where_clause != ""
@@ -147,9 +139,18 @@ class TableConfiguration(BaseModel):
147
139
  self.has_target_where_clause = self.target_where_clause != ""
148
140
 
149
141
  def _check_target_where_clause(self) -> None:
142
+ # Source and target are filtered independently; a single-sided filter compares
143
+ # different row subsets and almost always reports mismatches. Warn either way.
150
144
  if self.has_where_clause and not self.has_target_where_clause:
151
145
  LOGGER.warning(
152
- "Target where clause was not set for table %s. This may lead to unexpected results.",
146
+ "Source where clause is set but target where clause is missing for table %s. "
147
+ "Set both so the same rows are compared on source and target.",
148
+ self.target_fully_qualified_name,
149
+ )
150
+ elif self.has_target_where_clause and not self.has_where_clause:
151
+ LOGGER.warning(
152
+ "Target where clause is set but source where clause is missing for table %s. "
153
+ "Set both so the same rows are compared on source and target.",
153
154
  self.target_fully_qualified_name,
154
155
  )
155
156
 
@@ -159,9 +160,7 @@ class TableConfiguration(BaseModel):
159
160
 
160
161
  local_target_index_column_list = []
161
162
  for target_column_name in self.target_index_column_list:
162
- new_column_name = self.column_mappings.get(
163
- target_column_name, target_column_name
164
- )
163
+ new_column_name = self.column_mappings.get(target_column_name, target_column_name)
165
164
  local_target_index_column_list.append(new_column_name)
166
165
 
167
166
  self.target_index_column_list = local_target_index_column_list
@@ -189,8 +188,7 @@ class TableConfiguration(BaseModel):
189
188
  return
190
189
  elif self.max_failed_rows_number < 1:
191
190
  raise ValueError(
192
- f"Invalid value for max failed rows number in table f{self.fully_qualified_name}. "
193
- "Value must be greater than or equal to 1."
191
+ f"Invalid value for max failed rows number in table f{self.fully_qualified_name}. Value must be greater than or equal to 1."
194
192
  )
195
193
 
196
194
  def _normalize_where_clause(self) -> None:
@@ -198,18 +196,13 @@ class TableConfiguration(BaseModel):
198
196
  self.where_clause = HelperDatabase.remove_escape_quotes(self.where_clause)
199
197
 
200
198
  if self.has_target_where_clause:
201
- self.target_where_clause = HelperDatabase.remove_escape_quotes(
202
- self.target_where_clause
203
- )
199
+ self.target_where_clause = HelperDatabase.remove_escape_quotes(self.target_where_clause)
204
200
 
205
201
  def _set_is_temporary_table(self) -> None:
206
202
  self.is_temporary_table = self.object_type != ObjectType.TABLE
207
203
 
208
204
  def _normalize_column_selection_list(self) -> None:
209
- self.column_selection_list = [
210
- HelperDatabase.remove_escape_quotes(col)
211
- for col in self.column_selection_list
212
- ]
205
+ self.column_selection_list = [HelperDatabase.remove_escape_quotes(col) for col in self.column_selection_list]
213
206
 
214
207
  def _set_internal_identifiers(
215
208
  self,
@@ -641,6 +641,7 @@ class SQLQueriesTemplateGenerator:
641
641
  fully_qualified_temporary_table_name: str,
642
642
  fully_qualified_view_name: str,
643
643
  platform: str,
644
+ query_modifiers=None,
644
645
  ) -> str:
645
646
  """
646
647
  Generate the SQL query to materialize a view as a temporary table.
@@ -649,6 +650,7 @@ class SQLQueriesTemplateGenerator:
649
650
  fully_qualified_temporary_table_name (str): The fully qualified name of the temporary table.
650
651
  fully_qualified_view_name (str): The fully qualified name of the view.
651
652
  platform (str): The platform identifier (e.g., Platform.SNOWFLAKE.value, Platform.SQLSERVER.value)
653
+ query_modifiers: Resolved query modifiers for the source view scan.
652
654
 
653
655
  Returns:
654
656
  str: SQL query string to materialize the view as a temporary table.
@@ -660,6 +662,7 @@ class SQLQueriesTemplateGenerator:
660
662
  template_file,
661
663
  fully_qualified_temporary_table_name=fully_qualified_temporary_table_name,
662
664
  fully_qualified_view_name=fully_qualified_view_name,
665
+ query_modifiers=query_modifiers,
663
666
  )
664
667
  except jinja2.exceptions.TemplateNotFound:
665
668
  raise ValueError(f"Template not found: {template_file}. Please create it in the {self.template_dir} directory.") from None
@@ -14,16 +14,16 @@
14
14
  # ---- Numeric types ----
15
15
  # TRIM() strips the leading spaces that TO_CHAR produces, matching Snowflake's FM format output.
16
16
  NUMBER: TRIM(TO_CHAR({{ col_name }}, '999999999999999999999999999990.0000'))
17
- FLOAT: TRIM(TO_CHAR(CAST({{ col_name }} AS NUMBER(28,4)), 'FM999999999999999999999999999990.0000'))
18
- BINARY_FLOAT: TRIM(TO_CHAR(CAST({{ col_name }} AS NUMBER(28,4)), 'FM999999999999999999999999999990.0000'))
19
- BINARY_DOUBLE: TRIM(TO_CHAR(CAST({{ col_name }} AS NUMBER(28,4)), 'FM999999999999999999999999999990.0000'))
17
+ FLOAT: '{{ float_tme_shim }}'
18
+ BINARY_FLOAT: '{{ float_tme_shim }}'
19
+ BINARY_DOUBLE: '{{ float_tme_shim }}'
20
20
  INTEGER: TRIM(TO_CHAR({{ col_name }}, '999999999999999999999999999990.0000'))
21
21
  SMALLINT: TRIM(TO_CHAR({{ col_name }}, '999999999999999999999999999990.0000'))
22
22
  # ANSI synonyms — Oracle stores these as NUMBER/INTEGER/FLOAT(63) internally
23
23
  DECIMAL: TRIM(TO_CHAR({{ col_name }}, '999999999999999999999999999990.0000'))
24
24
  NUMERIC: TRIM(TO_CHAR({{ col_name }}, '999999999999999999999999999990.0000'))
25
25
  INT: TRIM(TO_CHAR({{ col_name }}, '999999999999999999999999999990.0000'))
26
- REAL: TRIM(TO_CHAR(CAST({{ col_name }} AS NUMBER(28,4)), 'FM999999999999999999999999999990.0000'))
26
+ REAL: '{{ float_tme_shim }}'
27
27
 
28
28
  # ---- Character types ----
29
29
  # NCHAR and NVARCHAR2 must be explicitly cast to VARCHAR2 before concatenation.
@@ -43,12 +43,12 @@ NCLOB: NVL(RTRIM(CAST({{ col_name }} AS VARCHAR2(4000))), '')
43
43
  LONG: NVL(RTRIM({{ col_name }}), '')
44
44
 
45
45
  # ---- Binary / Large Object types ----
46
- RAW: "'0x' || RAWTOHEX({{ col_name }})"
47
- LONG RAW: "'0x' || RAWTOHEX({{ col_name }})"
48
- BLOB: "'0x' || RAWTOHEX(DBMS_LOB.SUBSTR({{ col_name }}, 4000, 1))"
46
+ RAW: RAWTOHEX({{ col_name }})
47
+ LONG RAW: RAWTOHEX({{ col_name }})
48
+ BLOB: RAWTOHEX(DBMS_LOB.SUBSTR({{ col_name }}, 4000, 1))
49
49
  # BFILE is an external file locator; reads the first 4000 bytes via DBMS_LOB.
50
50
  # Requires the file to be accessible from the DB server.
51
- BFILE: "'0x' || RAWTOHEX(DBMS_LOB.SUBSTR({{ col_name }}, 4000, 1))"
51
+ BFILE: RAWTOHEX(DBMS_LOB.SUBSTR({{ col_name }}, 4000, 1))
52
52
 
53
53
  # ---- Row address types ----
54
54
  # ROWID and UROWID are stored as opaque row-address strings; TRIM + NVL is sufficient.
@@ -48,7 +48,6 @@ from snowflake.snowflake_data_validation.query.query_generator_base import (
48
48
  resolve_table_context_modifiers,
49
49
  )
50
50
  from snowflake.snowflake_data_validation.utils.constants import (
51
- COL_NAME_NO_QUOTES_PLACEHOLDER,
52
51
  NULL_HASHING_SENTINEL,
53
52
  NULL_HASHING_SENTINEL_KEY,
54
53
  Platform,
@@ -62,6 +61,27 @@ from snowflake.snowflake_data_validation.utils.model.table_context import TableC
62
61
  LOGGER = logging.getLogger(__name__)
63
62
 
64
63
 
64
+ def build_oracle_float_tme_shim(col_ref: str) -> str:
65
+ """Return inline Oracle SQL that renders *col_ref* in Snowflake ``TME`` shape."""
66
+ base = f"LOWER(TRIM(TO_CHAR({col_ref}, 'TME')))"
67
+ exponent_pos = f"NULLIF(INSTR({base}, 'e'), 0)"
68
+ mantissa = f"SUBSTR({base}, 1, {exponent_pos} - 1)"
69
+ exponent_int = f"CAST(SUBSTR({base}, {exponent_pos} + 1, 50) AS NUMBER)"
70
+ decimal_pos = f"NULLIF(INSTR({mantissa}, '.'), 0)"
71
+ fraction = f"SUBSTR({mantissa}, {decimal_pos} + 1, 50)"
72
+ fraction_trimmed = f"RTRIM({fraction}, '0')"
73
+ mantissa_trimmed = (
74
+ f"CASE WHEN {decimal_pos} IS NULL THEN {mantissa} "
75
+ f"ELSE SUBSTR({mantissa}, 1, {decimal_pos} - 1) || "
76
+ f"CASE WHEN {fraction_trimmed} IS NULL OR {fraction_trimmed} = '' THEN '' ELSE '.' || {fraction_trimmed} END END"
77
+ )
78
+ return (
79
+ f"CASE WHEN {col_ref} IS NULL THEN NULL "
80
+ f"WHEN {exponent_pos} IS NULL THEN UPPER({base}) "
81
+ f"ELSE ({mantissa_trimmed}) || 'E' || CAST({exponent_int} AS VARCHAR2(11)) END"
82
+ )
83
+
84
+
65
85
  class QueryGeneratorOracle(QueryGeneratorBase):
66
86
  """Oracle-specific implementation of the query generator.
67
87
 
@@ -78,6 +98,9 @@ class QueryGeneratorOracle(QueryGeneratorBase):
78
98
  self.jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader(str(templates_dir)))
79
99
  self.jinja_env.globals[NULL_HASHING_SENTINEL_KEY] = NULL_HASHING_SENTINEL
80
100
 
101
+ def build_float_tme_shim(self, column, col_ref: str) -> str:
102
+ return build_oracle_float_tme_shim(col_ref)
103
+
81
104
  def generate_extract_md5_rows_chunk_query(self, chunk_id: str, table_context: TableContext) -> str:
82
105
  """Not used in the Oracle CDV pipeline.
83
106
 
@@ -130,7 +153,10 @@ class QueryGeneratorOracle(QueryGeneratorBase):
130
153
  datatypes_normalization_templates,
131
154
  table_context,
132
155
  )
133
- renderer_templates[column.name] = normalization_template.replace(COL_NAME_NO_QUOTES_PLACEHOLDER, column.name)
156
+ renderer_templates[column.name] = self.render_normalization_template(
157
+ normalization_template,
158
+ column,
159
+ )
134
160
  return renderer_templates
135
161
 
136
162
  def _build_row_md5_select(
@@ -1,3 +1,4 @@
1
+ from shared.query_modifiers.template_context import QueryModifiersTemplateContext
1
2
  from snowflake.snowflake_data_validation.configuration.model.view_configuration import (
2
3
  ViewConfiguration,
3
4
  )
@@ -49,6 +50,7 @@ class ViewPreProcessor:
49
50
  fully_qualified_temporary_table_name=view_configuration.internal_fully_qualified_name,
50
51
  platform=context.source_platform,
51
52
  sql_generator=context.sql_generator,
53
+ query_modifiers=QueryModifiersTemplateContext.empty(),
52
54
  )
53
55
 
54
56
  # Execute the materialization (create temporary table)
@@ -3,7 +3,7 @@
3
3
  # align with ST_ASWKT on the Snowflake side. Native point uses subscripts;
4
4
  # PostGIS geometry/geography use ST_AsText when present.
5
5
  # CAST(... AS ...) is used instead of :: casts so YAML parses unambiguously.
6
- # BOOLEAN / BOOL: emit lowercase true/false to match Snowflake TO_CHAR(boolean).
6
+ # BOOLEAN / BOOL: emit uppercase true/false to match Snowflake.
7
7
  # NUMERIC / DECIMAL / approximate floats: align canonical text with Snowflake ``TO_CHAR`` on the
8
8
  # mirror (Snowflake normalization templates unchanged here — Postgres adjusts to match).
9
9
  # DECIMAL / NUMERIC columns round-trip through NUMERIC(38, 12) before TO_CHAR so Postgres output
@@ -29,12 +29,12 @@ BIGINT: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}"
29
29
  BIGSERIAL: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
30
30
  BIT: TRIM(CAST("{{ col_name }}" AS TEXT))
31
31
  BIT VARYING: TRIM(CAST("{{ col_name }}" AS TEXT))
32
- BOOL: TRIM(CASE WHEN "{{ col_name }}" IS TRUE THEN 'true' WHEN "{{ col_name }}" IS FALSE THEN 'false' END)
33
- BOOLEAN: TRIM(CASE WHEN "{{ col_name }}" IS TRUE THEN 'true' WHEN "{{ col_name }}" IS FALSE THEN 'false' END)
32
+ BOOL: TRIM(CASE WHEN "{{ col_name }}" IS TRUE THEN 'TRUE' WHEN "{{ col_name }}" IS FALSE THEN 'FALSE' END)
33
+ BOOLEAN: TRIM(CASE WHEN "{{ col_name }}" IS TRUE THEN 'TRUE' WHEN "{{ col_name }}" IS FALSE THEN 'FALSE' END)
34
34
  BOX: TRIM(CAST("{{ col_name }}" AS TEXT))
35
35
  BPCHAR: RTRIM("{{ col_name }}")
36
- # BYTEA: prefixed uppercase hex must match Snowflake BINARY ('0x' || HEX_ENCODE).
37
- BYTEA: "'0x' || UPPER(ENCODE(\"{{ col_name }}\", 'hex'))"
36
+ # BYTEA: uppercase hex without prefix (matches Snowflake HEX_ENCODE(...)).
37
+ BYTEA: UPPER(ENCODE("{{ col_name }}", 'hex'))
38
38
  CHAR: RTRIM("{{ col_name }}")
39
39
  CHARACTER: RTRIM("{{ col_name }}")
40
40
  CHARACTER VARYING: RTRIM("{{ col_name }}")
@@ -45,9 +45,9 @@ DATERANGE: TRIM(CAST("{{ col_name }}" AS TEXT))
45
45
  DECIMAL: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
46
46
  DEFAULT: RTRIM(CAST("{{ col_name }}" AS TEXT))
47
47
  DOMAIN: RTRIM(CAST("{{ col_name }}" AS TEXT))
48
- DOUBLE PRECISION: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST(CASE WHEN CAST("{{ col_name }}" AS DOUBLE PRECISION) IS NOT DISTINCT FROM 0::DOUBLE PRECISION THEN 0::DOUBLE PRECISION ELSE CAST("{{ col_name }}" AS DOUBLE PRECISION) END AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST(CASE WHEN CAST("{{ col_name }}" AS DOUBLE PRECISION) IS NOT DISTINCT FROM 0::DOUBLE PRECISION THEN 0::DOUBLE PRECISION ELSE CAST("{{ col_name }}" AS DOUBLE PRECISION) END AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
48
+ DOUBLE PRECISION: '{{ float_tme_shim }}'
49
49
  ENUM: RTRIM(CAST("{{ col_name }}" AS TEXT))
50
- FLOAT: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST(CASE WHEN CAST("{{ col_name }}" AS DOUBLE PRECISION) IS NOT DISTINCT FROM 0::DOUBLE PRECISION THEN 0::DOUBLE PRECISION ELSE CAST("{{ col_name }}" AS DOUBLE PRECISION) END AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST(CASE WHEN CAST("{{ col_name }}" AS DOUBLE PRECISION) IS NOT DISTINCT FROM 0::DOUBLE PRECISION THEN 0::DOUBLE PRECISION ELSE CAST("{{ col_name }}" AS DOUBLE PRECISION) END AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
50
+ FLOAT: '{{ float_tme_shim }}'
51
51
  GEOGRAPHY: TRIM(ST_AsText("{{ col_name }}"))
52
52
  GEOMETRY: TRIM(ST_AsText("{{ col_name }}"))
53
53
  INET: TRIM(CAST("{{ col_name }}" AS TEXT))
@@ -69,7 +69,7 @@ OID: TRIM(CAST("{{ col_name }}" AS TEXT))
69
69
  PATH: TRIM(CAST("{{ col_name }}" AS TEXT))
70
70
  POINT: TRIM(FORMAT('POINT(%s %s)', ("{{ col_name }}")[0], ("{{ col_name }}")[1]))
71
71
  POLYGON: TRIM(CAST("{{ col_name }}" AS TEXT))
72
- REAL: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST(CAST(CASE WHEN CAST("{{ col_name }}" AS REAL) IS NOT DISTINCT FROM 0::REAL THEN 0::REAL ELSE CAST("{{ col_name }}" AS REAL) END AS DOUBLE PRECISION) AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST(CAST(CASE WHEN CAST("{{ col_name }}" AS REAL) IS NOT DISTINCT FROM 0::REAL THEN 0::REAL ELSE CAST("{{ col_name }}" AS REAL) END AS DOUBLE PRECISION) AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
72
+ REAL: '{{ float_tme_shim }}'
73
73
  SERIAL: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
74
74
  SMALLINT: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
75
75
  SMALLSERIAL: CASE WHEN "{{ col_name }}" IS NULL THEN NULL WHEN CAST("{{ col_name }}" AS NUMERIC(38, 12)) = 0 THEN '0.0000' ELSE TRIM(REGEXP_REPLACE(TRIM(TO_CHAR(CAST("{{ col_name }}" AS NUMERIC(38, 12)), 'FM9999999999999999999999999999.0000')), '^\\.', '0.')) END
@@ -25,7 +25,6 @@ from snowflake.snowflake_data_validation.query.query_generator_base import (
25
25
  resolve_table_context_modifiers,
26
26
  )
27
27
  from snowflake.snowflake_data_validation.utils.constants import (
28
- COL_NAME_NO_QUOTES_PLACEHOLDER,
29
28
  NULL_HASHING_SENTINEL,
30
29
  NULL_HASHING_SENTINEL_KEY,
31
30
  Platform,
@@ -36,6 +35,27 @@ from snowflake.snowflake_data_validation.utils.model.table_context import TableC
36
35
  LOGGER = logging.getLogger(__name__)
37
36
 
38
37
 
38
+ def build_postgresql_float_tme_shim(col_ref: str) -> str:
39
+ """Return inline PostgreSQL SQL that renders *col_ref* in Snowflake ``TME`` shape."""
40
+ base = f"LOWER(TRIM(CAST({col_ref} AS TEXT)))"
41
+ exponent_pos = f"NULLIF(POSITION('e' IN {base}), 0)"
42
+ mantissa_src = f"CASE WHEN {exponent_pos} IS NULL THEN {base} ELSE SUBSTRING({base} FROM 1 FOR {exponent_pos} - 1) END"
43
+ exponent_int = f"CAST(TRIM(SUBSTRING({base} FROM {exponent_pos} + 1)) AS BIGINT)"
44
+ decimal_pos = f"NULLIF(POSITION('.' IN {mantissa_src}), 0)"
45
+ fraction = f"SUBSTRING({mantissa_src} FROM {decimal_pos} + 1)"
46
+ fraction_trimmed = f"RTRIM({fraction}, '0')"
47
+ mantissa_trimmed = (
48
+ f"CASE WHEN {decimal_pos} IS NULL THEN {mantissa_src} "
49
+ f"ELSE SUBSTRING({mantissa_src} FROM 1 FOR {decimal_pos} - 1) || "
50
+ f"CASE WHEN {fraction_trimmed} = '' THEN '' ELSE '.' || {fraction_trimmed} END END"
51
+ )
52
+ return (
53
+ f"CASE WHEN {col_ref} IS NULL THEN NULL "
54
+ f"WHEN {exponent_pos} IS NULL THEN UPPER({mantissa_trimmed}) || 'E0' "
55
+ f"ELSE UPPER({mantissa_trimmed}) || 'E' || TRIM(CAST({exponent_int} AS TEXT)) END"
56
+ )
57
+
58
+
39
59
  class QueryGeneratorPostgresql(QueryGeneratorBase):
40
60
  """Query generator for PostgreSQL (chunked MD5 pipeline aligned with Redshift)."""
41
61
 
@@ -47,6 +67,15 @@ class QueryGeneratorPostgresql(QueryGeneratorBase):
47
67
  self.jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader(str(templates_dir)))
48
68
  self.jinja_env.globals[NULL_HASHING_SENTINEL_KEY] = NULL_HASHING_SENTINEL
49
69
 
70
+ def _float_column_reference(self, column) -> str:
71
+ return f'"{column.name}"'
72
+
73
+ def build_float_tme_shim(self, column, col_ref: str) -> str:
74
+ return build_postgresql_float_tme_shim(col_ref)
75
+
76
+ def _render_normalization_template(self, template: str, column) -> str:
77
+ return super()._render_normalization_template(template, column)
78
+
50
79
  def generate_cell_validation_data_query(
51
80
  self,
52
81
  table_context: TableContext,
@@ -58,8 +87,10 @@ class QueryGeneratorPostgresql(QueryGeneratorBase):
58
87
  for column in table_context.columns_to_validate:
59
88
  data_type = "VARCHAR" if column.data_type == "TEXT" else column.data_type
60
89
  normalization_template = datatypes_normalization_templates[data_type]
61
- normalization_template_rendered = normalization_template.replace(COL_NAME_NO_QUOTES_PLACEHOLDER, column.name)
62
- datatypes_normalization_renderer_templates[column.name] = normalization_template_rendered
90
+ datatypes_normalization_renderer_templates[column.name] = self._render_normalization_template(
91
+ normalization_template,
92
+ column,
93
+ )
63
94
 
64
95
  return table_context.sql_generator.generate_cell_validation_data_select_query(
65
96
  platform=table_context.platform.value,
@@ -101,8 +132,10 @@ class QueryGeneratorPostgresql(QueryGeneratorBase):
101
132
  normalization_template = datatypes_normalization_templates.get("DEFAULT")
102
133
  if normalization_template is None:
103
134
  raise ValueError(f"No normalization template found for data type {column.data_type} and no DEFAULT template available.")
104
- normalization_template_rendered = normalization_template.replace(COL_NAME_NO_QUOTES_PLACEHOLDER, column.name)
105
- datatypes_normalization_renderer_templates[column.name] = normalization_template_rendered
135
+ datatypes_normalization_renderer_templates[column.name] = self._render_normalization_template(
136
+ normalization_template,
137
+ column,
138
+ )
106
139
 
107
140
  column_groups = table_context.column_groups
108
141
 
@@ -17,6 +17,7 @@
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
+ from shared.query_modifiers.template_context import QueryModifiersTemplateContext
20
21
  from snowflake.snowflake_data_validation.configuration.model.table_configuration import (
21
22
  TableConfiguration,
22
23
  )
@@ -41,6 +42,7 @@ def generate_view_materialization_query(
41
42
  fully_qualified_temporary_table_name: str,
42
43
  platform: Platform,
43
44
  sql_generator: SQLQueriesTemplateGenerator,
45
+ query_modifiers: QueryModifiersTemplateContext | None = None,
44
46
  ) -> GeneratedQuery:
45
47
  """Generate a query to materialize a view as a temporary table.
46
48
 
@@ -55,6 +57,7 @@ def generate_view_materialization_query(
55
57
  temporary table to create (e.g., "database.schema.temp_table_name").
56
58
  platform: The database platform (SNOWFLAKE, SQLSERVER, etc.).
57
59
  sql_generator: The SQLQueriesTemplateGenerator instance to use for query generation.
60
+ query_modifiers: Resolved source-side SQL modifiers for the view scan.
58
61
 
59
62
  Returns:
60
63
  GeneratedQuery: The generated DDL statement to create the temporary table.
@@ -70,6 +73,7 @@ def generate_view_materialization_query(
70
73
  fully_qualified_view_name=fully_qualified_view_name,
71
74
  platform=platform,
72
75
  sql_generator=sql_generator,
76
+ query_modifiers=query_modifiers,
73
77
  )
74
78
  return GeneratedQuery(query_string=query_string)
75
79
 
@@ -199,9 +203,7 @@ def generate_case_sensitive_columns_query(
199
203
 
200
204
  """
201
205
  try:
202
- database_name = HelperDatabase.normalize_identifier(
203
- identifier=target_database_name
204
- )
206
+ database_name = HelperDatabase.normalize_identifier(identifier=target_database_name)
205
207
 
206
208
  schema_name = HelperDatabase.normalize_identifier(identifier=target_schema_name)
207
209
 
@@ -15,8 +15,16 @@
15
15
 
16
16
  """Query generation package for database-specific query generators."""
17
17
 
18
+ from snowflake.snowflake_data_validation.query.charset_normalization import (
19
+ CharacterSetResolver,
20
+ DefaultCharacterSetResolver,
21
+ )
18
22
  from snowflake.snowflake_data_validation.query.query_generator_base import (
19
23
  QueryGeneratorBase,
20
24
  )
21
25
 
22
- __all__ = ["QueryGeneratorBase"]
26
+ __all__ = [
27
+ "CharacterSetResolver",
28
+ "DefaultCharacterSetResolver",
29
+ "QueryGeneratorBase",
30
+ ]