snowflake-data-validation 1.40.0__tar.gz → 1.41.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (630) hide show
  1. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/.gitignore +3 -0
  2. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/PKG-INFO +26 -1
  3. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/README.md +25 -0
  4. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +1 -1
  5. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +8 -8
  6. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +45 -7
  7. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +1 -1
  8. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +1 -1
  9. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +1 -0
  10. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +1 -1
  11. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +5 -3
  12. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +52 -4
  13. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +3 -0
  14. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +3 -0
  15. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +15 -0
  16. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +22 -1
  17. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +9 -0
  18. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +2 -2
  19. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +1 -1
  20. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +5 -5
  21. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +2 -1
  22. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +3 -0
  23. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +1 -1
  24. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +3 -0
  25. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +15 -3
  26. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +89 -2
  27. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +33 -0
  28. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +10 -58
  29. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +19 -61
  30. snowflake_data_validation-1.41.0/src/snowflake/snowflake_data_validation/query/sql_type_families.py +92 -0
  31. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +1 -1
  32. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +2 -1
  33. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +4 -1
  34. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +1 -1
  35. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +11 -11
  36. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +8 -8
  37. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +10 -0
  38. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +44 -8
  39. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +1 -1
  40. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +11 -2
  41. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +15 -4
  42. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +45 -5
  43. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_query_generator_teradata.py +4 -1
  44. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +130 -2
  45. snowflake_data_validation-1.41.0/tests/unit/bigquery/test_bigquery_l1_string_length.py +37 -0
  46. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/bigquery/test_query_generator_bigquery.py +142 -2
  47. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/db2/test_db2_query_generator.py +129 -1
  48. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_iso_normalization.py +17 -3
  49. snowflake_data_validation-1.41.0/tests/unit/oracle/test_oracle_metadata_extractor.py +238 -0
  50. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_query_generator.py +181 -4
  51. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +8 -6
  52. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_sqlserver_row_queries.py +213 -2
  53. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_charset_normalization.py +12 -0
  54. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_data_validator.py +68 -0
  55. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_executor_factory.py +18 -0
  56. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_float_bit_canonical.py +14 -0
  57. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_iso_dv_common.py +20 -0
  58. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_l2_collation_metadata.py +23 -0
  59. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_pushdown_diff_sql.py +12 -0
  60. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_query_generator_numeric_scale.py +35 -0
  61. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_sql_literal_jinja_filter.py +26 -0
  62. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_sqlserver_multi_version_support.py +4 -1
  63. snowflake_data_validation-1.40.0/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -110
  64. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/LICENSE +0 -0
  65. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/docs/README.md +0 -0
  66. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/pyproject.toml +0 -0
  67. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
  68. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
  69. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
  70. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
  71. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
  72. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
  73. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
  74. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
  75. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
  76. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +0 -0
  77. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
  78. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
  79. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
  80. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
  81. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
  82. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
  83. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
  84. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
  85. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
  86. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
  87. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
  88. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +0 -0
  89. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
  90. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
  91. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
  92. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
  93. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
  94. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
  95. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
  96. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
  97. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
  98. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
  99. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
  100. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
  101. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
  102. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
  103. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
  104. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
  105. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
  106. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
  107. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
  108. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
  109. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
  110. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
  111. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +0 -0
  112. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +0 -0
  113. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
  114. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
  115. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
  116. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
  117. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
  118. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
  119. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
  120. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
  121. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
  122. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
  123. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
  124. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
  125. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
  126. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
  127. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
  128. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
  129. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
  130. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
  131. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
  132. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +0 -0
  133. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
  134. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
  135. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
  136. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
  137. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
  138. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
  139. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
  140. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
  141. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
  142. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
  143. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
  144. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
  145. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
  146. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
  147. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
  148. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
  149. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
  150. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
  151. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
  152. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  153. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
  154. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
  155. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
  156. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
  157. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
  158. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
  159. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
  160. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
  161. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
  162. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
  163. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
  164. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
  165. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
  166. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
  167. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
  168. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
  169. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
  170. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
  171. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
  172. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
  173. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
  174. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
  175. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
  176. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
  177. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
  178. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
  179. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
  180. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
  181. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
  182. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
  183. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
  184. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
  185. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
  186. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
  187. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
  188. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
  189. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
  190. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
  191. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
  192. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
  193. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
  194. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
  195. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
  196. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
  197. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
  198. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
  199. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
  200. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
  201. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
  202. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
  203. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
  204. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
  205. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
  206. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
  207. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
  208. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
  209. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
  210. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
  211. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
  212. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
  213. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
  214. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
  215. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
  216. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
  217. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
  218. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
  219. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
  220. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
  221. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
  222. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
  223. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
  224. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
  225. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
  226. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
  227. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
  228. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
  229. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
  230. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
  231. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
  232. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
  233. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
  234. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
  235. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  236. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
  237. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
  238. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
  239. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
  240. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
  241. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
  242. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
  243. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
  244. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
  245. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -0
  246. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
  247. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
  248. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
  249. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
  250. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
  251. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +0 -0
  252. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
  253. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +0 -0
  254. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
  255. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
  256. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
  257. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
  258. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
  259. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
  260. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
  261. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
  262. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
  263. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
  264. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
  265. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
  266. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
  267. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
  268. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
  269. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
  270. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
  271. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +0 -0
  272. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
  273. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
  274. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
  275. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
  276. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
  277. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
  278. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
  279. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
  280. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
  281. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
  282. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
  283. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
  284. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
  285. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
  286. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
  287. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
  288. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
  289. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +0 -0
  290. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
  291. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
  292. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
  293. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
  294. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
  295. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
  296. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
  297. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
  298. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
  299. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
  300. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
  301. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
  302. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
  303. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
  304. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
  305. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
  306. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
  307. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
  308. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
  309. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
  310. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
  311. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
  312. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
  313. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
  314. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
  315. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
  316. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
  317. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
  318. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
  319. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
  320. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
  321. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
  322. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
  323. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
  324. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
  325. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
  326. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
  327. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
  328. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
  329. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
  330. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
  331. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
  332. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
  333. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
  334. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
  335. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
  336. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
  337. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
  338. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
  339. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
  340. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
  341. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
  342. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
  343. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
  344. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
  345. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
  346. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
  347. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
  348. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
  349. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
  350. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
  351. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
  352. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +0 -0
  353. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
  354. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
  355. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
  356. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
  357. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
  358. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +0 -0
  359. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
  360. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
  361. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
  362. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +0 -0
  363. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
  364. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
  365. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
  366. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
  367. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
  368. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
  369. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
  370. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
  371. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
  372. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
  373. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
  374. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
  375. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
  376. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/constants.py +0 -0
  377. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
  378. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
  379. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
  380. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
  381. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
  382. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
  383. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
  384. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
  385. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
  386. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
  387. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +0 -0
  388. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
  389. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
  390. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
  391. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
  392. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
  393. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
  394. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
  395. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
  396. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +0 -0
  397. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
  398. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
  399. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +0 -0
  400. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
  401. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
  402. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
  403. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
  404. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
  405. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
  406. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
  407. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +0 -0
  408. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
  409. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
  410. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
  411. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
  412. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
  413. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
  414. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
  415. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
  416. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
  417. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
  418. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
  419. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
  420. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
  421. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
  422. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
  423. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
  424. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
  425. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
  426. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
  427. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
  428. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
  429. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
  430. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
  431. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
  432. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
  433. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
  434. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
  435. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
  436. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
  437. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
  438. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
  439. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
  440. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
  441. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/.coveragerc +0 -0
  442. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/conftest.py +0 -0
  443. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/integration/.coveragerc +0 -0
  444. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
  445. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/integration/test_async_generation_integration.py +0 -0
  446. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/integration/test_async_validation_integration.py +0 -0
  447. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/integration/test_reference_integration.py +0 -0
  448. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/integration/test_source_validation_integration.py +0 -0
  449. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/integration/test_sync_validation_integration.py +0 -0
  450. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Postgresql/test_postgresql_collation.py +0 -0
  451. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
  452. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
  453. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
  454. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
  455. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
  456. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_connector_redshift.py +0 -0
  457. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
  458. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_collation.py +0 -0
  459. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
  460. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
  461. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_super_normalization.py +0 -0
  462. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
  463. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_connector_teradata.py +0 -0
  464. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
  465. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_teradata_collation.py +0 -0
  466. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
  467. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
  468. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
  469. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
  470. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/__init__.py +0 -0
  471. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
  472. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
  473. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
  474. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
  475. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
  476. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
  477. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
  478. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
  479. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
  480. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
  481. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
  482. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
  483. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
  484. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
  485. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
  486. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/__init__.py +0 -0
  487. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
  488. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
  489. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
  490. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
  491. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
  492. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
  493. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/bigquery/__init__.py +0 -0
  494. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
  495. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
  496. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/db2/__init__.py +0 -0
  497. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
  498. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/db2/test_db2_registration.py +0 -0
  499. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/__init__.py +0 -0
  500. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -0
  501. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
  502. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
  503. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
  504. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
  505. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
  506. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
  507. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
  508. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
  509. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/__init__.py +0 -0
  510. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
  511. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
  512. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
  513. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
  514. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
  515. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/__init__.py +0 -0
  516. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
  517. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
  518. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -0
  519. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
  520. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
  521. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
  522. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_accepted_transformation.py +0 -0
  523. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_arguments_manager_base.py +0 -0
  524. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_arguments_manager_factory.py +0 -0
  525. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_batched_metrics_queries.py +0 -0
  526. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
  527. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_catalog_column_size.py +0 -0
  528. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_cell_data_validator.py +0 -0
  529. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_cell_validation_query_generation.py +0 -0
  530. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_column_grouping.py +0 -0
  531. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_column_metadata.py +0 -0
  532. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_column_normalization_override.py +0 -0
  533. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_column_partitioning_strategy.py +0 -0
  534. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_comparison_codec.py +0 -0
  535. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_comparison_orchestrator.py +0 -0
  536. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_configuration_file_editor.py +0 -0
  537. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_configuration_file_generator.py +0 -0
  538. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_configuration_file_synchronizer.py +0 -0
  539. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_configuration_loader.py +0 -0
  540. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_configuration_model.py +0 -0
  541. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_connection_pool.py +0 -0
  542. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_connector_failure_tracker.py +0 -0
  543. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_connector_snowflake.py +0 -0
  544. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_cpu_optimizer.py +0 -0
  545. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_custom_templates_models.py +0 -0
  546. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_escape_odbc_value.py +0 -0
  547. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_float_canonical_templates.py +0 -0
  548. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_get_configuration_file.py +0 -0
  549. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_get_target_cols.py +0 -0
  550. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_helper_dataframe.py +0 -0
  551. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_helper_polars_cast.py +0 -0
  552. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_helpers.py +0 -0
  553. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_html_report_builder.py +0 -0
  554. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_iceberg_dv_l3_normalization.py +0 -0
  555. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_index_key_format.py +0 -0
  556. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_internal_helpers.py +0 -0
  557. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_interval_common.py +0 -0
  558. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_logging_config.py +0 -0
  559. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_metric_identifier_rendering.py +0 -0
  560. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_metrics_reshape.py +0 -0
  561. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_metrics_result_shape.py +0 -0
  562. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_metrics_templates_casts.py +0 -0
  563. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_metrics_tolerance.py +0 -0
  564. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_normalize_shape_aware.py +0 -0
  565. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_numeric_scale_resolution.py +0 -0
  566. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_platform_bridge.py +0 -0
  567. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_postgresql_normalization_templates.py +0 -0
  568. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_postgresql_tz_normalization.py +0 -0
  569. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_query_cell_level_validation.py +0 -0
  570. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_query_metrics_level_validation.py +0 -0
  571. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_query_to_dataframe.py +0 -0
  572. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_query_validator.py +0 -0
  573. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_qvci_fallback.py +0 -0
  574. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
  575. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_qvci_fallback_triggers.py +0 -0
  576. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_report_metadata.py +0 -0
  577. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_cell_level_validation.py +0 -0
  578. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
  579. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_snapshot_generation.py +0 -0
  580. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_snapshot_validation.py +0 -0
  581. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_to_dataframe.py +0 -0
  582. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_validator.py +0 -0
  583. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_row_count_bigint_overflow.py +0 -0
  584. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_row_data_validator.py +0 -0
  585. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_row_hash_column_delimiter.py +0 -0
  586. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_row_partitioning_strategy.py +0 -0
  587. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_row_validation_report_buffer.py +0 -0
  588. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_schema_column_selection.py +0 -0
  589. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_shutdown_coordinator.py +0 -0
  590. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_signature_external_table.py +0 -0
  591. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_signature_row_md5_query.py +0 -0
  592. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_snapshot_validation_statements.py +0 -0
  593. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_snowflake_arguments_manager.py +0 -0
  594. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
  595. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_snowflake_redshift_super_size_guard.py +0 -0
  596. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_source_validation_executor.py +0 -0
  597. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
  598. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_sql_catalog_template_guard.py +0 -0
  599. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_sqlite_validation_connection.py +0 -0
  600. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
  601. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_sync_executor_qvci_fallback.py +0 -0
  602. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_sync_validation_executor.py +0 -0
  603. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_table_column_metadata_model.py +0 -0
  604. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_table_configuration.py +0 -0
  605. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_table_context.py +0 -0
  606. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_table_metadata_processor.py +0 -0
  607. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_table_snapshot_generation.py +0 -0
  608. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_table_snapshot_validation.py +0 -0
  609. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_target_platform_factory.py +0 -0
  610. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_telemetry.py +0 -0
  611. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_templates_loader_manager.py +0 -0
  612. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_teradata_iso_normalization.py +0 -0
  613. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_teradata_string_rtrim_policy.py +0 -0
  614. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_teradata_timetz_metric_domain.py +0 -0
  615. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_timestamp_golden_vectors.py +0 -0
  616. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_configuration.py +0 -0
  617. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_database_connection.py +0 -0
  618. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_execution_context.py +0 -0
  619. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_progress_reporter.py +0 -0
  620. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_report_buffer.py +0 -0
  621. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_report_status.py +0 -0
  622. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_templates_dto.py +0 -0
  623. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_vector_bit_normalization.py +0 -0
  624. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_vector_common.py +0 -0
  625. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_vector_normalization.py +0 -0
  626. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_view_configuration.py +0 -0
  627. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/test_warm_start.py +0 -0
  628. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/utils/__init__.py +0 -0
  629. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/utils/test_constants.py +0 -0
  630. {snowflake_data_validation-1.40.0 → snowflake_data_validation-1.41.0}/tests/unit/utils/test_semi_structured_json_canonicalization.py +0 -0
@@ -233,6 +233,9 @@ requirements-dev.lock
233
233
  # E2E test session config (contains credentials)
234
234
  e2e-tests/config.yaml
235
235
 
236
+ # E2E Logs
237
+ e2e-tests/e2e-logs/
238
+
236
239
  # 1Password integration test config (contains account/user identifiers)
237
240
  shared/tests/secret_managers/integration/connections.toml
238
241
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: snowflake-data-validation
3
- Version: 1.40.0
3
+ Version: 1.41.0
4
4
  Summary: Snowflake Data Validation
5
5
  Project-URL: Bug Tracker, https://github.com/snowflake-eng/migrations-data-validation/issues
6
6
  Project-URL: Source code, https://github.com/snowflake-eng/migrations-data-validation/
@@ -188,6 +188,31 @@ For configuration options and examples, see the [official documentation](https:/
188
188
 
189
189
  ## Changelog
190
190
 
191
+ ### v1.41.0
192
+
193
+ **Improvements**
194
+
195
+ - Normalized SQL Server and Synapse text comparisons to use binary collation ordering.
196
+ - Normalized Oracle text comparisons with `COLLATE BINARY` and `ORA-00904` fallback.
197
+ - Added DB2 collation metadata capture for L1 reporting.
198
+ - Normalized BigQuery text comparisons with deterministic binary semantics.
199
+ - Removed legacy dual-cursor row-hash compare path from hybrid L3.
200
+ - Improved `FLOAT` and encoded text display in L3 cell validation results.
201
+
202
+ **Bug fixes**
203
+
204
+ - Fixed Oracle `TIMESTAMP WITH LOCAL TIME ZONE` extraction failing with `ORA-01821`.
205
+ - Fixed rows with `NULL` validation key being reported as `NOT_FOUND` on both sides.
206
+ - Fixed digit-only hybrid cell keys not being quoted for character columns.
207
+ - Fixed Teradata `PERIOD(DATE)` comparison using session-sensitive cast instead of deterministic `TO_CHAR`.
208
+
209
+ ### v1.40.1
210
+
211
+ **Bug fixes**
212
+
213
+ - Fixed L1 metadata reporting for unbounded string types on SQLite and BigQuery to use correct source capacity values.
214
+ - Fixed L1 character-length capacity comparison to report source-larger-than-target as a warning instead of a failure.
215
+
191
216
  ### v1.40.0
192
217
 
193
218
  **New features**
@@ -99,6 +99,31 @@ For configuration options and examples, see the [official documentation](https:/
99
99
 
100
100
  ## Changelog
101
101
 
102
+ ### v1.41.0
103
+
104
+ **Improvements**
105
+
106
+ - Normalized SQL Server and Synapse text comparisons to use binary collation ordering.
107
+ - Normalized Oracle text comparisons with `COLLATE BINARY` and `ORA-00904` fallback.
108
+ - Added DB2 collation metadata capture for L1 reporting.
109
+ - Normalized BigQuery text comparisons with deterministic binary semantics.
110
+ - Removed legacy dual-cursor row-hash compare path from hybrid L3.
111
+ - Improved `FLOAT` and encoded text display in L3 cell validation results.
112
+
113
+ **Bug fixes**
114
+
115
+ - Fixed Oracle `TIMESTAMP WITH LOCAL TIME ZONE` extraction failing with `ORA-01821`.
116
+ - Fixed rows with `NULL` validation key being reported as `NOT_FOUND` on both sides.
117
+ - Fixed digit-only hybrid cell keys not being quoted for character columns.
118
+ - Fixed Teradata `PERIOD(DATE)` comparison using session-sensitive cast instead of deterministic `TO_CHAR`.
119
+
120
+ ### v1.40.1
121
+
122
+ **Bug fixes**
123
+
124
+ - Fixed L1 metadata reporting for unbounded string types on SQLite and BigQuery to use correct source capacity values.
125
+ - Fixed L1 character-length capacity comparison to report source-larger-than-target as a warning instead of a failure.
126
+
102
127
  ### v1.40.0
103
128
 
104
129
  **New features**
@@ -10,5 +10,5 @@
10
10
  {{ qm.render_from_clause(query_modifiers, fully_qualified_name, 't') }}
11
11
  {% if has_where_clause %} WHERE {{ where_clause }} {% endif %}
12
12
  {% if order_by_columns %}
13
- ORDER BY {% for c in order_by_columns %} "{{ c }}"{% if not loop.last %}, {% endif %}{% endfor %}
13
+ ORDER BY {% for c in order_by_columns %} {{ order_by_collation_expressions.get(c, '"' ~ c ~ '"') }}{% if not loop.last %}, {% endif %}{% endfor %}
14
14
  {% endif %}
@@ -1,32 +1,32 @@
1
1
  {% import 'query_modifiers.sql.j2' as qm with context %}
2
2
  {{ qm.locking_prefix(query_modifiers) }}SELECT
3
3
  {% for index_column in index_column_collection %}
4
- "{{ index_column.name }}_IDX" AS "{{ index_column.name }}",
4
+ {{ (index_column.name ~ '_IDX') | tsql_quote_identifier }} AS {{ index_column.name | tsql_quote_identifier }},
5
5
  {% endfor %}
6
6
  UPPER(CONVERT(VARCHAR(32), HASHBYTES('MD5',
7
7
  {% if use_column_groups %}
8
8
  {% for group in column_groups %}
9
9
  {% if not loop.first %} + {% endif %}
10
10
  UPPER(CONVERT(VARCHAR(32), HASHBYTES('MD5', CAST(CONCAT(
11
- {% for col in group %}"{{ col.name }}"{% if not loop.last %}, '{{ row_hash_column_delimiter }}', {% endif %}{% endfor %}
11
+ {% for col in group %}{{ col.name | tsql_quote_identifier }}{{ row_hash_collation_suffix }}{% if not loop.last %}, '{{ row_hash_column_delimiter }}'{{ row_hash_collation_suffix }}, {% endif %}{% endfor %}
12
12
  ) AS VARCHAR(MAX))), 2))
13
13
  {% endfor %}
14
14
  {% elif column_collection|length > 1 %}
15
- CAST(CONCAT({{ column_names_separate_by_comma }}) AS VARCHAR(MAX))
15
+ CAST(CONCAT({% for column in column_collection %}{{ column.name | tsql_quote_identifier }}{{ row_hash_collation_suffix }}{% if not loop.last %}, '{{ row_hash_column_delimiter }}'{{ row_hash_collation_suffix }}, {% endif %}{% endfor %}) AS VARCHAR(MAX))
16
16
  {% else %}
17
- CAST({{ column_names_separate_by_comma }} AS VARCHAR(MAX))
17
+ CAST({{ column_collection[0].name | tsql_quote_identifier }} AS VARCHAR(MAX))
18
18
  {% endif %}
19
19
  ), 2)) AS ROW_MD5
20
20
  FROM
21
21
  (SELECT{{ qm.render_select_modifier(query_modifiers, 'src') }}
22
22
  {% for index_column in index_column_collection %}
23
- {{ datatypes_normalization_renderer_templates[index_column.name] }} AS "{{ index_column.name }}_IDX",
23
+ {{ datatypes_normalization_renderer_templates[index_column.name] }} AS {{ (index_column.name ~ '_IDX') | tsql_quote_identifier }},
24
24
  {% endfor %}
25
25
  {% for column in column_collection %}
26
26
  {% if column.nullable %}
27
- coalesce({{ datatypes_normalization_renderer_templates[column.name] }}, '{{ null_hashing_sentinel }}') AS "{{ column.name }}"{% if not loop.last %},{% endif %}
27
+ coalesce({{ datatypes_normalization_renderer_templates[column.name] }}, '{{ null_hashing_sentinel }}') AS {{ column.name | tsql_quote_identifier }}{% if not loop.last %},{% endif %}
28
28
  {% else %}
29
- {{ datatypes_normalization_renderer_templates[column.name] }} AS "{{ column.name }}"{% if not loop.last %},{% endif %}
29
+ {{ datatypes_normalization_renderer_templates[column.name] }} AS {{ column.name | tsql_quote_identifier }}{% if not loop.last %},{% endif %}
30
30
  {% endif %}
31
31
  {% endfor %}
32
32
  {{ qm.render_from_clause(query_modifiers, fully_qualified_name, 'src') }}
@@ -34,5 +34,5 @@ FROM
34
34
  ) AS RW
35
35
  {% if order_by_columns %}
36
36
  {# T-SQL does not support the NULLS FIRST keyword; under ASC it already sorts NULLs first, matching NULL_KEY (sentinel sorts first) in the streaming merge-join. #}
37
- ORDER BY {% for c in order_by_columns %}"{{ c }}_IDX"{% if not loop.last %}, {% endif %}{% endfor %}
37
+ ORDER BY {% for c in order_by_columns %}{{ order_by_collation_expressions.get(c, (c ~ '_IDX') | tsql_quote_identifier) }}{% if not loop.last %}, {% endif %}{% endfor %}
38
38
  {% endif %}
@@ -42,11 +42,14 @@ from snowflake.snowflake_data_validation.query.query_generator_base import (
42
42
  QueryGeneratorBase,
43
43
  resolve_table_context_modifiers,
44
44
  )
45
+ from snowflake.snowflake_data_validation.sqlserver.query.charset_normalization import (
46
+ SqlServerCharacterSetResolver,
47
+ )
45
48
  from snowflake.snowflake_data_validation.utils.constants import (
46
49
  Platform,
47
50
  )
48
51
  from snowflake.snowflake_data_validation.utils.measure_collation import (
49
- SOURCE_CHARACTER_TYPES,
52
+ TSQL_NORMALIZED_COLLATION_SUFFIX,
50
53
  tsql_measure_collation_tokens,
51
54
  )
52
55
  from snowflake.snowflake_data_validation.utils.model.table_context import TableContext
@@ -77,17 +80,30 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
77
80
 
78
81
  def __init__(self) -> None:
79
82
  """Initialize the Azure Synapse query generator."""
80
- super().__init__(platform=Platform.AZURE_SYNAPSE)
83
+ super().__init__(
84
+ platform=Platform.AZURE_SYNAPSE,
85
+ character_set_resolver=SqlServerCharacterSetResolver(),
86
+ )
81
87
 
82
88
  def _measure_collation_tokens(self, column, metric_name: str) -> tuple[str, str]:
83
89
  return tsql_measure_collation_tokens(
90
+ Platform.AZURE_SYNAPSE,
84
91
  column,
85
92
  metric_name,
86
- character_types=SOURCE_CHARACTER_TYPES[Platform.AZURE_SYNAPSE],
93
+ )
94
+
95
+ def _comparison_collation_tokens(self, column) -> tuple[str, str]:
96
+ return tsql_measure_collation_tokens(
97
+ Platform.AZURE_SYNAPSE,
98
+ column,
99
+ "count_distinct",
87
100
  )
88
101
 
89
102
  def _float_column_reference(self, column) -> str:
90
- return f'"{column.name}"'
103
+ return f'"{self._normalization_column_name(column)}"'
104
+
105
+ def _normalization_column_name(self, column) -> str:
106
+ return str(column.name).replace('"', '""')
91
107
 
92
108
  def build_float_bit_shim(self, column, col_ref: str) -> str:
93
109
  value_expr = float_bit_input_expr(
@@ -115,7 +131,8 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
115
131
 
116
132
  datatypes_normalization_templates = table_context.templates_loader_manager.datatypes_normalization_templates
117
133
  rendered: dict[str, str] = {}
118
- for column in self._row_md5_normalization_columns(table_context):
134
+ renderer_columns = self._row_md5_normalization_columns(table_context)
135
+ for column in renderer_columns:
119
136
  lookup_key = (column.data_type or "").strip().upper()
120
137
  normalization_template = self._lookup_normalization_template(
121
138
  datatypes_normalization_templates,
@@ -135,12 +152,27 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
135
152
  column_normalization_map,
136
153
  )
137
154
  rendered[column.name] = self._render_normalization_template(normalization_template, column)
138
- return apply_text_codec_to_renderer_templates(
155
+ rendered = apply_text_codec_to_renderer_templates(
139
156
  self.platform,
140
157
  rendered,
141
158
  column_codec_map,
142
- table_context.columns_to_validate,
159
+ renderer_columns,
143
160
  )
161
+ return {
162
+ column.name: (
163
+ rendered[column.name]
164
+ if self._codec_skips_comparison_collation(column_codec_map, column)
165
+ else self.wrap_compare_expr(
166
+ self.character_set_resolver.wrap_for_comparison(
167
+ rendered[column.name],
168
+ column,
169
+ is_case_sensitive=table_context.is_case_sensitive,
170
+ ),
171
+ column,
172
+ )
173
+ )
174
+ for column in renderer_columns
175
+ }
144
176
 
145
177
  def generate_row_md5_select_query(
146
178
  self,
@@ -197,6 +229,11 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
197
229
  where_clause=table_context.where_clause,
198
230
  column_groups=table_context.column_groups,
199
231
  order_by_columns=order_by_columns,
232
+ order_by_collation_expressions=self._order_by_collation_expressions(
233
+ table_context.index_column_collection,
234
+ alias_suffix="_IDX",
235
+ ),
236
+ row_hash_collation_suffix=TSQL_NORMALIZED_COLLATION_SUFFIX,
200
237
  query_modifiers=resolve_table_context_modifiers(table_context),
201
238
  )
202
239
 
@@ -227,6 +264,7 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
227
264
  has_where_clause=table_context.has_where_clause,
228
265
  where_clause=table_context.where_clause,
229
266
  order_by_columns=order_by_columns,
267
+ order_by_collation_expressions=self._order_by_collation_expressions(table_context.columns_to_validate),
230
268
  query_modifiers=resolve_table_context_modifiers(table_context),
231
269
  )
232
270
 
@@ -11,6 +11,6 @@ FROM (
11
11
  SELECT{{ qm.render_select_modifier(query_modifiers, 't') }} * {{ qm.render_from_clause(query_modifiers, fully_qualified_name, 't') }}
12
12
  {% if has_where_clause %} WHERE {{ where_clause }} {% endif %}
13
13
  {% if order_by_columns %}
14
- ORDER BY {% for c in order_by_columns %} `{{ c }}`{% if not loop.last %}, {% endif %}{% endfor %}
14
+ ORDER BY {% for c in order_by_columns %} {{ order_by_collation_expressions.get(c, '`' ~ c ~ '`') }}{% if not loop.last %}, {% endif %}{% endfor %}
15
15
  {% endif %}
16
16
  ) __ordered
@@ -279,7 +279,7 @@ STRING:
279
279
  metric_query: COUNTIF(`{{ col_name }}` = '')
280
280
  metric_return_datatype: INT64
281
281
  count_distinct:
282
- metric_query: COUNT(DISTINCT `{{ col_name }}`)
282
+ metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}`{{ col_name }}`{{ measure_collation_suffix }})
283
283
  metric_return_datatype: INT64
284
284
  count_null:
285
285
  metric_query: COUNTIF(`{{ col_name }}` IS NULL)
@@ -39,6 +39,7 @@ SELECT
39
39
  THEN 0
40
40
  ELSE NULL
41
41
  END AS scale,
42
+ c.collation_name AS collation_name,
42
43
  -1 AS calculated_column_size_in_bytes
43
44
  FROM `{{ database_name }}`.`{{ schema_name }}`.INFORMATION_SCHEMA.COLUMNS c
44
45
  WHERE c.table_name = '{{ table_name | escape_sql_literal }}';
@@ -35,5 +35,5 @@ FROM
35
35
  {% if has_where_clause %} WHERE {{ where_clause }} {% endif %}
36
36
  ) AS RW
37
37
  {% if order_by_columns %}
38
- ORDER BY {% for c in order_by_columns %}`{{ c }}_IDX` NULLS FIRST{% if not loop.last %}, {% endif %}{% endfor %}
38
+ ORDER BY {% for c in order_by_columns %}{{ order_by_collation_expressions.get(c, '`' ~ c ~ '_IDX`') }} NULLS FIRST{% if not loop.last %}, {% endif %}{% endfor %}
39
39
  {% endif %}
@@ -9,11 +9,12 @@ WITH rc_cte AS (
9
9
  -- Strip parameters (NUMERIC(10,2), STRING(100), ARRAY<INT64>...) to the base
10
10
  -- type so the L1 mapping keys off it; precision/scale below use raw c.data_type.
11
11
  TRIM(UPPER(REGEXP_EXTRACT(c.data_type, r'^[^(<]+'))) AS DATA_TYPE,
12
- -- STRING length lives in the type string; unbounded -> VARCHAR max. BYTES ->
13
- -- BINARY, which reports no length, so emit NULL to match.
12
+ -- STRING length lives in the type string. Bare STRING has no parameter;
13
+ -- BigQuery's per-value cap is 10 MiB (10485760 bytes), not Snowflake's
14
+ -- VARCHAR max. BYTES -> BINARY, which reports no length, so emit NULL.
14
15
  CASE
15
16
  WHEN STARTS_WITH(UPPER(c.data_type), 'STRING')
16
- THEN COALESCE(CAST(REGEXP_EXTRACT(c.data_type, r'\((\d+)\)') AS INT64), 16777216)
17
+ THEN COALESCE(CAST(REGEXP_EXTRACT(c.data_type, r'\((\d+)\)') AS INT64), 10485760)
17
18
  ELSE NULL
18
19
  END AS CHARACTER_MAXIMUM_LENGTH,
19
20
  -- INFORMATION_SCHEMA omits precision/scale; parse them from the type string.
@@ -43,6 +44,7 @@ WITH rc_cte AS (
43
44
  ELSE NULL
44
45
  END AS NUMERIC_SCALE,
45
46
  c.is_nullable AS IS_NULLABLE,
47
+ c.collation_name AS COLLATION_NAME,
46
48
  rc.ROW_COUNT
47
49
  FROM `{{ object_database }}`.`{{ object_schema }}`.INFORMATION_SCHEMA.COLUMNS c
48
50
  CROSS JOIN rc_cte rc
@@ -76,6 +76,33 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
76
76
  """Initialize the BigQuery query generator."""
77
77
  super().__init__(platform=Platform.BIGQUERY)
78
78
 
79
+ def _measure_collation_tokens(self, column, metric_name: str) -> tuple[str, str]:
80
+ """Force binary DISTINCT semantics only for metadata-gated STRING columns."""
81
+ if metric_name == "count_distinct" and self._base_data_type(column) == "STRING" and self._has_source_collation_metadata(column):
82
+ return "COLLATE(", ", '')"
83
+ return "", ""
84
+
85
+ def _comparison_collation_tokens(self, column) -> tuple[str, str]:
86
+ """Force binary compare/sort/hash semantics for metadata-gated STRING columns."""
87
+ if self._base_data_type(column) == "STRING" and self._has_source_collation_metadata(column):
88
+ return "COLLATE(", ", '')"
89
+ return "", ""
90
+
91
+ def _order_by_collation_expressions(
92
+ self,
93
+ columns,
94
+ *,
95
+ alias_suffix: str = "",
96
+ ) -> dict[str, str]:
97
+ """Return BigQuery-backticked ORDER BY expressions that need binary collation."""
98
+ expressions: dict[str, str] = {}
99
+ for column in columns:
100
+ quoted = f"`{column.name}{alias_suffix}`"
101
+ wrapped = self.wrap_compare_expr(quoted, column)
102
+ if wrapped != quoted:
103
+ expressions[column.name] = wrapped
104
+ return expressions
105
+
79
106
  @staticmethod
80
107
  def normalize_bigquery_type(raw_type: str | None) -> str | None:
81
108
  """Reduce a BigQuery declared type to its parameterless base type.
@@ -189,8 +216,9 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
189
216
  column_normalization_map: dict[str, str] | None = None,
190
217
  ) -> dict[str, str]:
191
218
  datatypes_normalization_templates = table_context.templates_loader_manager.datatypes_normalization_templates
219
+ renderer_columns = self._row_md5_normalization_columns(table_context)
192
220
  renderer_templates: dict[str, str] = {}
193
- for column in self._row_md5_normalization_columns(table_context):
221
+ for column in renderer_columns:
194
222
  normalization_template = self._resolve_datatype_normalization_template(
195
223
  column,
196
224
  datatypes_normalization_templates,
@@ -202,9 +230,22 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
202
230
  )
203
231
  # Resolve ``{{ col_name }}`` and, for numeric types, the scale-aware
204
232
  # ``{{ numeric_format_mask }}`` (BigQuery emits a printf ``%.Nf``).
205
- rendered = self._render_normalization_template(normalization_template, column)
206
- renderer_templates[column.name] = rendered
207
- return apply_text_codec_to_renderer_templates(self.platform, renderer_templates, column_codec_map)
233
+ renderer_templates[column.name] = self._render_normalization_template(
234
+ normalization_template,
235
+ column,
236
+ )
237
+ renderer_templates = apply_text_codec_to_renderer_templates(
238
+ self.platform,
239
+ renderer_templates,
240
+ column_codec_map,
241
+ renderer_columns,
242
+ )
243
+ # L3 MD5 / cell fingerprints must be UTF-8 code points. COLLATE() on
244
+ # those expressions is a compare/sort annotation; CONCAT/MD5 treat a
245
+ # collated STRING as collation keys and false-diff Snowflake utf8.
246
+ # Index-only columns are hashed in row-MD5 even when they are not in
247
+ # columns_to_validate; keep their renderer entries.
248
+ return {column.name: renderer_templates[column.name] for column in renderer_columns}
208
249
 
209
250
  def _build_row_md5_select(
210
251
  self,
@@ -236,6 +277,10 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
236
277
  where_clause=table_context.where_clause,
237
278
  column_groups=table_context.column_groups,
238
279
  order_by_columns=order_by_columns,
280
+ order_by_collation_expressions=self._order_by_collation_expressions(
281
+ table_context.index_column_collection,
282
+ alias_suffix="_IDX",
283
+ ),
239
284
  query_modifiers=resolve_table_context_modifiers(table_context),
240
285
  )
241
286
 
@@ -261,6 +306,9 @@ class QueryGeneratorBigQuery(QueryGeneratorBase):
261
306
  has_where_clause=table_context.has_where_clause,
262
307
  where_clause=table_context.where_clause,
263
308
  order_by_columns=order_by_columns,
309
+ order_by_collation_expressions=self._order_by_collation_expressions(
310
+ [column for column in table_context.columns_to_validate if order_by_columns and column.name in order_by_columns]
311
+ ),
264
312
  query_modifiers=resolve_table_context_modifiers(table_context),
265
313
  )
266
314
 
@@ -14,6 +14,9 @@ SELECT
14
14
  C.LENGTH AS character_length,
15
15
  C.LENGTH AS precision,
16
16
  C.SCALE AS scale,
17
+ -- Per-column collation of a string column; NULL for every non-string column
18
+ -- and for string columns defined without one.
19
+ C.COLLATIONNAME AS collation_name,
17
20
  CASE
18
21
  WHEN UPPER(C.TYPENAME) IN ('CHARACTER', 'CHAR', 'VARCHAR',
19
22
  'NCHAR', 'NVARCHAR')
@@ -37,6 +37,9 @@ SELECT
37
37
  WHEN UPPER(C.TYPENAME) IN ('SMALLINT', 'INTEGER', 'INT', 'BIGINT') THEN 0
38
38
  ELSE NULL
39
39
  END AS NUMERIC_SCALE,
40
+ -- Per-column collation of a string column; NULL for every non-string column
41
+ -- and for string columns defined without one.
42
+ C.COLLATIONNAME AS COLLATION_NAME,
40
43
  CASE C.NULLS
41
44
  WHEN 'Y' THEN 'YES'
42
45
  ELSE 'NO'
@@ -83,6 +83,21 @@ class QueryGeneratorDb2(QueryGeneratorOracle):
83
83
  self.jinja_env.globals[NULL_HASHING_SENTINEL_KEY] = NULL_HASHING_SENTINEL
84
84
  self.jinja_env.globals[ROW_HASH_COLUMN_DELIMITER_KEY] = ROW_HASH_COLUMN_DELIMITER
85
85
 
86
+ def _measure_collation_tokens(self, column, metric_name: str) -> tuple[str, str]:
87
+ """
88
+ Keep DB2 LUW measures unwrapped: no fixed, name-free binary equivalent exists.
89
+
90
+ L1 does capture ``SYSCAT.COLUMNS.COLLATIONNAME``, but DB2 offers no way to
91
+ spend it here: ``COLLATE USING IDENTITY`` is DDL (CREATE/ALTER TABLE), not
92
+ an expression modifier, and ``COLLATION_KEY_BIT`` takes a named collation --
93
+ which would put the source collation name into generated SQL.
94
+ """
95
+ return "", ""
96
+
97
+ def _comparison_collation_tokens(self, column) -> tuple[str, str]:
98
+ """Keep DB2 LUW compare/sort/hash expressions unwrapped (see :meth:`_measure_collation_tokens`)."""
99
+ return "", ""
100
+
86
101
  @staticmethod
87
102
  def _build_fm_to_char_mask(scale: int, *, integer_nines: int = _DB2_INTEGER_NINES) -> str:
88
103
  """Return a DB2-valid ``9…90[.0…0]`` mask (Oracle ``FM`` is rejected by DB2).
@@ -13,6 +13,7 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
 
16
+ from collections.abc import Callable
16
17
  from dataclasses import dataclass
17
18
 
18
19
  from snowflake.snowflake_data_validation.azure_synapse.extractor.metadata_extractor_azure_synapse import (
@@ -139,6 +140,18 @@ from snowflake.snowflake_data_validation.validation.validation_database_manager
139
140
  )
140
141
 
141
142
 
143
+ def _create_oracle_query_generator(connector: ConnectorBase) -> QueryGeneratorOracle:
144
+ """Create an Oracle query generator with server-derived capabilities."""
145
+ connection = connector.connection
146
+ version = getattr(connection, "version", None) if connection is not None else None
147
+ if not isinstance(version, str) and connection is not None:
148
+ getinfo = getattr(connection, "getinfo", None)
149
+ if callable(getinfo):
150
+ odbc_version = getinfo(18) # SQL_DBMS_VER
151
+ version = odbc_version if isinstance(odbc_version, str) else None
152
+ return QueryGeneratorOracle(oracle_version=version)
153
+
154
+
142
155
  @dataclass
143
156
  class PlatformConfig:
144
157
  """Configuration for platform-specific components."""
@@ -146,6 +159,13 @@ class PlatformConfig:
146
159
  query_generator: type[QueryGeneratorBase]
147
160
  metadata_extractor: type[MetadataExtractorBase]
148
161
  script_writer: type[ScriptWriterBase]
162
+ query_generator_factory: Callable[[ConnectorBase], QueryGeneratorBase] | None = None
163
+
164
+ def create_query_generator(self, connector: ConnectorBase) -> QueryGeneratorBase:
165
+ """Create the platform query generator through its optional extension hook."""
166
+ if self.query_generator_factory is not None:
167
+ return self.query_generator_factory(connector)
168
+ return self.query_generator()
149
169
 
150
170
 
151
171
  class ExecutorFactory:
@@ -193,6 +213,7 @@ class ExecutorFactory:
193
213
  query_generator=QueryGeneratorOracle,
194
214
  metadata_extractor=MetadataExtractorOracle,
195
215
  script_writer=ScriptWriterOracle,
216
+ query_generator_factory=_create_oracle_query_generator,
196
217
  ),
197
218
  Platform.POSTGRESQL: PlatformConfig(
198
219
  query_generator=QueryGeneratorPostgresql,
@@ -295,7 +316,7 @@ class ExecutorFactory:
295
316
  raise ValueError(f"Unsupported platform: {platform}")
296
317
 
297
318
  config = self._platform_configs[platform]
298
- query_generator = config.query_generator()
319
+ query_generator = config.create_query_generator(connector)
299
320
 
300
321
  # Propagate SQL Server version capabilities to the query generator
301
322
  if platform == Platform.SQLSERVER and isinstance(connector, ConnectorSqlServer):
@@ -44,6 +44,12 @@ from snowflake.snowflake_data_validation.utils.qvci_fallback import (
44
44
  )
45
45
 
46
46
 
47
+ def tsql_quote_identifier(identifier: object) -> str:
48
+ """Quote a T-SQL identifier, escaping embedded double quotes."""
49
+ escaped_identifier = str(identifier).replace('"', '""')
50
+ return f'"{escaped_identifier}"'
51
+
52
+
47
53
  class SQLQueriesTemplateGenerator:
48
54
  """
49
55
  SQL queries template generator using Jinja2 templates.
@@ -76,6 +82,7 @@ class SQLQueriesTemplateGenerator:
76
82
  )
77
83
  )
78
84
  self.env.filters["escape_sql_literal"] = escape_sql_literal
85
+ self.env.filters["tsql_quote_identifier"] = tsql_quote_identifier
79
86
  # Single source of truth for the NULL sentinel used by L3 row-MD5 and
80
87
  # cell-validation normalization. Exposed to every template so the
81
88
  # COALESCE fallback can keep a real SQL NULL distinct from "".
@@ -652,6 +659,7 @@ class SQLQueriesTemplateGenerator:
652
659
  order_by_collation_expressions: dict[str, str] | None = None,
653
660
  query_modifiers: QueryModifiersTemplateContext | None = None,
654
661
  hash_md5_function: str | None = None,
662
+ row_hash_collation_suffix: str = "",
655
663
  ) -> str:
656
664
  """Render an inline SELECT that returns (index_cols, ROW_MD5) directly.
657
665
 
@@ -672,6 +680,7 @@ class SQLQueriesTemplateGenerator:
672
680
  use_column_groups=column_groups is not None,
673
681
  order_by_columns=order_by_columns or [],
674
682
  order_by_collation_expressions=order_by_collation_expressions or {},
683
+ row_hash_collation_suffix=row_hash_collation_suffix,
675
684
  )
676
685
  if column_groups is not None:
677
686
  render_kwargs["column_groups"] = column_groups
@@ -273,8 +273,8 @@ class MetadataExtractorOracle(MetadataExtractorBase):
273
273
  def compute_md5(self, table_context: TableContext, other_table_name: str) -> None:
274
274
  """Not used in the Oracle CDV pipeline.
275
275
 
276
- Oracle L3 row validation uses ``generate_row_md5_select_query`` (inline
277
- SELECT, no temp table) via ``RowValidationHandler`` in the DEA. The
276
+ Oracle L3 row hashing uses ``generate_row_md5_select_query`` (inline
277
+ SELECT, no temp table) on the signature-extract path. The
278
278
  chunked CTAS pipeline (``compute_md5`` → temp table →
279
279
  ``extract_md5_rows_chunk``) is not executed for Oracle.
280
280
 
@@ -10,5 +10,5 @@
10
10
  {{ qm.render_from_clause(query_modifiers, fully_qualified_name, 't') }}
11
11
  {% if has_where_clause %} WHERE {{ where_clause }} {% endif %}
12
12
  {% if order_by_columns %}
13
- ORDER BY {% for c in order_by_columns %} "{{ c }}"{% if not loop.last %}, {% endif %}{% endfor %}
13
+ ORDER BY {% for c in order_by_columns %} {{ order_by_collation_expressions.get(c, '"' ~ c ~ '"') }}{% if not loop.last %}, {% endif %}{% endfor %}
14
14
  {% endif %}
@@ -315,7 +315,7 @@ CHAR:
315
315
  metric_query: AVG(LENGTH(RTRIM("{{ col_name }}")))
316
316
  metric_return_datatype: FLOAT
317
317
  count_distinct:
318
- metric_query: COUNT(DISTINCT RTRIM("{{ col_name }}"))
318
+ metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}RTRIM("{{ col_name }}"){{ measure_collation_suffix }})
319
319
  metric_return_datatype: INTEGER
320
320
  count_null:
321
321
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
@@ -336,7 +336,7 @@ NCHAR:
336
336
  metric_query: AVG(LENGTH(RTRIM("{{ col_name }}")))
337
337
  metric_return_datatype: FLOAT
338
338
  count_distinct:
339
- metric_query: COUNT(DISTINCT RTRIM("{{ col_name }}"))
339
+ metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}RTRIM("{{ col_name }}"){{ measure_collation_suffix }})
340
340
  metric_return_datatype: INTEGER
341
341
  count_null:
342
342
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
@@ -356,7 +356,7 @@ VARCHAR2:
356
356
  metric_query: AVG(LENGTH("{{ col_name }}"))
357
357
  metric_return_datatype: FLOAT
358
358
  count_distinct:
359
- metric_query: COUNT(DISTINCT "{{ col_name }}")
359
+ metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}"{{ col_name }}"{{ measure_collation_suffix }})
360
360
  metric_return_datatype: INTEGER
361
361
  count_null:
362
362
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
@@ -379,7 +379,7 @@ NVARCHAR2:
379
379
  metric_query: AVG(LENGTH("{{ col_name }}"))
380
380
  metric_return_datatype: FLOAT
381
381
  count_distinct:
382
- metric_query: COUNT(DISTINCT "{{ col_name }}")
382
+ metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}"{{ col_name }}"{{ measure_collation_suffix }})
383
383
  metric_return_datatype: INTEGER
384
384
  count_null:
385
385
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
@@ -400,7 +400,7 @@ VARCHAR:
400
400
  metric_query: AVG(LENGTH("{{ col_name }}"))
401
401
  metric_return_datatype: FLOAT
402
402
  count_distinct:
403
- metric_query: COUNT(DISTINCT "{{ col_name }}")
403
+ metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}"{{ col_name }}"{{ measure_collation_suffix }})
404
404
  metric_return_datatype: INTEGER
405
405
  count_null:
406
406
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
@@ -77,7 +77,8 @@ SDO_GEOMETRY: CASE WHEN {{ col_name }} IS NULL THEN NULL ELSE TRIM(REGEXP_REPLAC
77
77
  # Format masks aligned with Snowflake TIMESTAMP_NTZ / TIMESTAMP_TZ normalization:
78
78
  # DATE / TIMESTAMP → ISO 8601 with 9-digit fractional seconds (FF9)
79
79
  # TIMESTAMP WITH TIME ZONE → ISO with per-row offset (TZH:TZM)
80
- # TIMESTAMP WITH LOCAL TIME ZONE → session wall-clock ISO (no UTC extract)
80
+ # TIMESTAMP WITH LOCAL TIME ZONE → generic session wall clock; Oracle/Snowflake
81
+ # paired DV overrides this template with UTC-instant normalization.
81
82
  DATE: TO_CHAR(CAST({{ col_name }} AS TIMESTAMP), 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
82
83
  TIMESTAMP: TO_CHAR({{ col_name }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
83
84
  TIMESTAMP WITH TIME ZONE: REGEXP_REPLACE(TO_CHAR({{ col_name }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9TZH:TZM'), 'Z$', '+00:00')
@@ -27,6 +27,9 @@ SELECT
27
27
  C.CHAR_LENGTH AS character_length,
28
28
  C.DATA_PRECISION AS precision,
29
29
  C.DATA_SCALE AS scale,
30
+ {% if supports_oracle_collation %}
31
+ C.COLLATION AS collation_name,
32
+ {% endif %}
30
33
  CASE
31
34
  WHEN C.DATA_TYPE IN ('CHAR', 'NCHAR', 'VARCHAR2', 'NVARCHAR2')
32
35
  THEN C.CHAR_LENGTH
@@ -37,5 +37,5 @@ FROM
37
37
  {% if has_where_clause %} WHERE {{ where_clause }} {% endif %}
38
38
  ) RW
39
39
  {% if order_by_columns %}
40
- ORDER BY {% for c in order_by_columns %}"{{ c }}_IDX" NULLS FIRST{% if not loop.last %}, {% endif %}{% endfor %}
40
+ ORDER BY {% for c in order_by_columns %}{{ order_by_collation_expressions.get(c, '"' ~ c ~ '_IDX"') }} NULLS FIRST{% if not loop.last %}, {% endif %}{% endfor %}
41
41
  {% endif %}