snowflake-data-validation 1.40.1__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.1 → snowflake_data_validation-1.41.0}/.gitignore +3 -0
  2. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/PKG-INFO +19 -1
  3. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/README.md +18 -0
  4. {snowflake_data_validation-1.40.1 → 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.1 → 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.1 → 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.1 → 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.1 → 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.1 → 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.1 → 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.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +1 -0
  12. {snowflake_data_validation-1.40.1 → 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.1 → 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.1 → 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.1 → 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.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +22 -1
  17. {snowflake_data_validation-1.40.1 → 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.1 → 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.1 → 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.1 → 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.1 → 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.1 → 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.1 → 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.1 → 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.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +15 -3
  26. {snowflake_data_validation-1.40.1 → 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.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +33 -0
  28. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +10 -58
  29. {snowflake_data_validation-1.40.1 → 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.1 → 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.1 → 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.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +1 -1
  34. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +11 -11
  35. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +8 -8
  36. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +10 -0
  37. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +44 -8
  38. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +1 -1
  39. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +11 -2
  40. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/measure_collation.py +15 -4
  41. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_query_generator_teradata.py +4 -1
  42. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +130 -2
  43. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/bigquery/test_query_generator_bigquery.py +142 -2
  44. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/db2/test_db2_query_generator.py +129 -1
  45. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_iso_normalization.py +17 -3
  46. snowflake_data_validation-1.41.0/tests/unit/oracle/test_oracle_metadata_extractor.py +238 -0
  47. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_query_generator.py +181 -4
  48. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_sqlserver_row_queries.py +213 -2
  49. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_charset_normalization.py +12 -0
  50. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_executor_factory.py +18 -0
  51. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_float_bit_canonical.py +14 -0
  52. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_iso_dv_common.py +20 -0
  53. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_l2_collation_metadata.py +23 -0
  54. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_pushdown_diff_sql.py +12 -0
  55. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_query_generator_numeric_scale.py +35 -0
  56. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_sql_literal_jinja_filter.py +26 -0
  57. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_sqlserver_multi_version_support.py +4 -1
  58. snowflake_data_validation-1.40.1/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -110
  59. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/LICENSE +0 -0
  60. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/docs/README.md +0 -0
  61. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/pyproject.toml +0 -0
  62. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
  63. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
  64. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
  65. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
  66. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
  67. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
  68. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
  69. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
  70. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +0 -0
  71. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +0 -0
  72. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
  73. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
  74. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
  75. {snowflake_data_validation-1.40.1 → 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
  76. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
  77. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
  78. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
  79. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
  80. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
  81. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
  82. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
  83. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +0 -0
  84. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
  85. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
  86. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
  87. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
  88. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
  89. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
  90. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
  91. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
  92. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
  93. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
  94. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
  95. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
  96. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
  97. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
  98. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
  99. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
  100. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
  101. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
  102. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
  103. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
  104. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
  105. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
  106. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +0 -0
  107. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +0 -0
  108. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
  109. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
  110. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
  111. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
  112. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
  113. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
  114. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
  115. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
  116. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
  117. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
  118. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
  119. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
  120. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
  121. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
  122. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
  123. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
  124. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
  125. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
  126. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
  127. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +0 -0
  128. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
  129. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
  130. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
  131. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
  132. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
  133. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
  134. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
  135. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
  136. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
  137. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
  138. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
  139. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
  140. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
  141. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
  142. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
  143. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
  144. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
  145. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
  146. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
  147. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  148. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_concatenated_table_template.sql.j2 +0 -0
  149. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_insert_template.sql.j2 +0 -0
  150. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_chunk_row_md5_table_template.sql.j2 +0 -0
  151. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
  152. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
  153. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
  154. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
  155. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
  156. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
  157. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
  158. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
  159. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
  160. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
  161. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
  162. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
  163. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
  164. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/query/charset_normalization.py +0 -0
  165. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +0 -0
  166. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
  167. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
  168. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
  169. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
  170. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
  171. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
  172. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
  173. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
  174. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
  175. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
  176. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
  177. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
  178. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
  179. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
  180. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
  181. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
  182. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
  183. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
  184. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
  185. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
  186. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
  187. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
  188. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
  189. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
  190. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
  191. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
  192. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
  193. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
  194. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
  195. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
  196. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
  197. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
  198. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
  199. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
  200. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
  201. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
  202. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
  203. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
  204. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
  205. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
  206. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
  207. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
  208. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
  209. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
  210. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
  211. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
  212. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
  213. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
  214. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +0 -0
  215. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
  216. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
  217. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
  218. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
  219. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
  220. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
  221. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
  222. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
  223. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
  224. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
  225. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
  226. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
  227. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
  228. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
  229. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
  230. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  231. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
  232. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
  233. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
  234. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
  235. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
  236. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
  237. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
  238. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
  239. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
  240. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -0
  241. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
  242. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
  243. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
  244. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
  245. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
  246. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +0 -0
  247. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
  248. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +0 -0
  249. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
  250. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
  251. {snowflake_data_validation-1.40.1 → 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
  252. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
  253. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
  254. {snowflake_data_validation-1.40.1 → 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
  255. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
  256. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
  257. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
  258. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
  259. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
  260. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
  261. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
  262. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
  263. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
  264. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
  265. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
  266. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +0 -0
  267. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
  268. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
  269. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
  270. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
  271. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
  272. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
  273. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
  274. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
  275. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
  276. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
  277. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
  278. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
  279. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
  280. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
  281. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
  282. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
  283. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
  284. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +0 -0
  285. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
  286. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
  287. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
  288. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
  289. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
  290. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
  291. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
  292. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
  293. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
  294. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
  295. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
  296. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
  297. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
  298. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
  299. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
  300. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
  301. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
  302. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -0
  303. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
  304. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
  305. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
  306. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
  307. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
  308. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
  309. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
  310. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
  311. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
  312. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
  313. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
  314. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
  315. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
  316. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
  317. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
  318. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
  319. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
  320. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
  321. {snowflake_data_validation-1.40.1 → 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
  322. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
  323. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +0 -0
  324. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
  325. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
  326. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
  327. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
  328. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
  329. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
  330. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
  331. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
  332. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
  333. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
  334. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
  335. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
  336. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
  337. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
  338. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
  339. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
  340. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
  341. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
  342. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
  343. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
  344. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
  345. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
  346. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
  347. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
  348. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +0 -0
  349. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
  350. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
  351. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
  352. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
  353. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
  354. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +0 -0
  355. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
  356. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
  357. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
  358. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +0 -0
  359. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
  360. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
  361. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
  362. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
  363. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/catalog_column_size.py +0 -0
  364. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
  365. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
  366. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
  367. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
  368. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
  369. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
  370. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
  371. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
  372. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/constants.py +0 -0
  373. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
  374. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
  375. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
  376. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
  377. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
  378. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
  379. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
  380. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
  381. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
  382. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
  383. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +0 -0
  384. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
  385. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/interval_common.py +0 -0
  386. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
  387. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
  388. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
  389. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
  390. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
  391. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
  392. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +0 -0
  393. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
  394. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
  395. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +0 -0
  396. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
  397. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
  398. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +0 -0
  399. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
  400. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
  401. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
  402. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
  403. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +0 -0
  404. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
  405. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
  406. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
  407. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
  408. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
  409. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
  410. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
  411. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
  412. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +0 -0
  413. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
  414. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
  415. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
  416. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
  417. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
  418. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
  419. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
  420. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
  421. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
  422. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
  423. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
  424. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
  425. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
  426. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
  427. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
  428. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
  429. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
  430. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
  431. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
  432. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
  433. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
  434. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
  435. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
  436. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
  437. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
  438. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/.coveragerc +0 -0
  439. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/conftest.py +0 -0
  440. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/integration/.coveragerc +0 -0
  441. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
  442. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/integration/test_async_generation_integration.py +0 -0
  443. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/integration/test_async_validation_integration.py +0 -0
  444. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/integration/test_reference_integration.py +0 -0
  445. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/integration/test_source_validation_integration.py +0 -0
  446. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/integration/test_sync_validation_integration.py +0 -0
  447. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Postgresql/test_postgresql_collation.py +0 -0
  448. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +0 -0
  449. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
  450. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
  451. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
  452. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
  453. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_connector_redshift.py +0 -0
  454. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
  455. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_collation.py +0 -0
  456. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
  457. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
  458. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_super_normalization.py +0 -0
  459. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
  460. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_connector_teradata.py +0 -0
  461. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
  462. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_teradata_collation.py +0 -0
  463. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
  464. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
  465. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
  466. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
  467. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/__init__.py +0 -0
  468. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
  469. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
  470. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
  471. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
  472. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
  473. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
  474. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
  475. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
  476. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
  477. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
  478. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
  479. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
  480. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
  481. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
  482. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
  483. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/__init__.py +0 -0
  484. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
  485. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
  486. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +0 -0
  487. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +0 -0
  488. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
  489. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
  490. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/bigquery/__init__.py +0 -0
  491. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/bigquery/test_bigquery_l1_string_length.py +0 -0
  492. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
  493. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
  494. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/db2/__init__.py +0 -0
  495. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
  496. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/db2/test_db2_registration.py +0 -0
  497. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/oracle/__init__.py +0 -0
  498. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -0
  499. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
  500. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
  501. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
  502. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
  503. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
  504. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
  505. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
  506. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
  507. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/__init__.py +0 -0
  508. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
  509. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
  510. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
  511. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +0 -0
  512. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
  513. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
  514. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/__init__.py +0 -0
  515. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
  516. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
  517. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +0 -0
  518. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_sqlserver_row_count_overflow.py +0 -0
  519. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
  520. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
  521. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_accepted_transformation.py +0 -0
  522. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_arguments_manager_base.py +0 -0
  523. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_arguments_manager_factory.py +0 -0
  524. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_batched_metrics_queries.py +0 -0
  525. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
  526. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_catalog_column_size.py +0 -0
  527. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_cell_data_validator.py +0 -0
  528. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_cell_validation_query_generation.py +0 -0
  529. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_column_grouping.py +0 -0
  530. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_column_metadata.py +0 -0
  531. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_column_normalization_override.py +0 -0
  532. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_column_partitioning_strategy.py +0 -0
  533. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_comparison_codec.py +0 -0
  534. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_comparison_orchestrator.py +0 -0
  535. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_configuration_file_editor.py +0 -0
  536. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_configuration_file_generator.py +0 -0
  537. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_configuration_file_synchronizer.py +0 -0
  538. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_configuration_loader.py +0 -0
  539. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_configuration_model.py +0 -0
  540. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_connection_pool.py +0 -0
  541. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_connector_failure_tracker.py +0 -0
  542. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_connector_snowflake.py +0 -0
  543. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_cpu_optimizer.py +0 -0
  544. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_custom_templates_models.py +0 -0
  545. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_data_validator.py +0 -0
  546. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_escape_odbc_value.py +0 -0
  547. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_float_canonical_templates.py +0 -0
  548. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_get_configuration_file.py +0 -0
  549. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_get_target_cols.py +0 -0
  550. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_helper_dataframe.py +0 -0
  551. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_helper_polars_cast.py +0 -0
  552. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_helpers.py +0 -0
  553. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_html_report_builder.py +0 -0
  554. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_iceberg_dv_l3_normalization.py +0 -0
  555. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_index_key_format.py +0 -0
  556. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_internal_helpers.py +0 -0
  557. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_interval_common.py +0 -0
  558. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_logging_config.py +0 -0
  559. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_metric_identifier_rendering.py +0 -0
  560. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_metrics_reshape.py +0 -0
  561. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_metrics_result_shape.py +0 -0
  562. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_metrics_templates_casts.py +0 -0
  563. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_metrics_tolerance.py +0 -0
  564. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_normalize_shape_aware.py +0 -0
  565. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_numeric_scale_resolution.py +0 -0
  566. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_platform_bridge.py +0 -0
  567. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_postgresql_normalization_templates.py +0 -0
  568. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_postgresql_tz_normalization.py +0 -0
  569. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_query_cell_level_validation.py +0 -0
  570. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_query_metrics_level_validation.py +0 -0
  571. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_query_to_dataframe.py +0 -0
  572. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_query_validator.py +0 -0
  573. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_qvci_fallback.py +0 -0
  574. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
  575. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_qvci_fallback_triggers.py +0 -0
  576. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_report_metadata.py +0 -0
  577. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_cell_level_validation.py +0 -0
  578. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
  579. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_snapshot_generation.py +0 -0
  580. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_snapshot_validation.py +0 -0
  581. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_to_dataframe.py +0 -0
  582. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_result_set_validator.py +0 -0
  583. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_row_count_bigint_overflow.py +0 -0
  584. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_row_data_validator.py +0 -0
  585. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_row_hash_column_delimiter.py +0 -0
  586. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_row_partitioning_strategy.py +0 -0
  587. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_row_validation_report_buffer.py +0 -0
  588. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_schema_column_selection.py +0 -0
  589. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_shutdown_coordinator.py +0 -0
  590. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_signature_external_table.py +0 -0
  591. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_signature_row_md5_query.py +0 -0
  592. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_snapshot_validation_statements.py +0 -0
  593. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_snowflake_arguments_manager.py +0 -0
  594. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
  595. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_snowflake_redshift_super_size_guard.py +0 -0
  596. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_source_validation_executor.py +0 -0
  597. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
  598. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_sql_catalog_template_guard.py +0 -0
  599. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_sqlite_validation_connection.py +0 -0
  600. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
  601. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_sync_executor_qvci_fallback.py +0 -0
  602. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_sync_validation_executor.py +0 -0
  603. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_table_column_metadata_model.py +0 -0
  604. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_table_configuration.py +0 -0
  605. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_table_context.py +0 -0
  606. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_table_metadata_processor.py +0 -0
  607. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_table_snapshot_generation.py +0 -0
  608. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_table_snapshot_validation.py +0 -0
  609. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_target_platform_factory.py +0 -0
  610. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_telemetry.py +0 -0
  611. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_templates_loader_manager.py +0 -0
  612. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_teradata_iso_normalization.py +0 -0
  613. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_teradata_string_rtrim_policy.py +0 -0
  614. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_teradata_timetz_metric_domain.py +0 -0
  615. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_timestamp_golden_vectors.py +0 -0
  616. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_configuration.py +0 -0
  617. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_database_connection.py +0 -0
  618. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_execution_context.py +0 -0
  619. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_progress_reporter.py +0 -0
  620. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_report_buffer.py +0 -0
  621. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_report_status.py +0 -0
  622. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_validation_templates_dto.py +0 -0
  623. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_vector_bit_normalization.py +0 -0
  624. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_vector_common.py +0 -0
  625. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_vector_normalization.py +0 -0
  626. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_view_configuration.py +0 -0
  627. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/test_warm_start.py +0 -0
  628. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/utils/__init__.py +0 -0
  629. {snowflake_data_validation-1.40.1 → snowflake_data_validation-1.41.0}/tests/unit/utils/test_constants.py +0 -0
  630. {snowflake_data_validation-1.40.1 → 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.1
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,24 @@ 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
+
191
209
  ### v1.40.1
192
210
 
193
211
  **Bug fixes**
@@ -99,6 +99,24 @@ 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
+
102
120
  ### v1.40.1
103
121
 
104
122
  **Bug fixes**
@@ -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 %}
@@ -44,6 +44,7 @@ WITH rc_cte AS (
44
44
  ELSE NULL
45
45
  END AS NUMERIC_SCALE,
46
46
  c.is_nullable AS IS_NULLABLE,
47
+ c.collation_name AS COLLATION_NAME,
47
48
  rc.ROW_COUNT
48
49
  FROM `{{ object_database }}`.`{{ object_schema }}`.INFORMATION_SCHEMA.COLUMNS c
49
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 %}
@@ -36,6 +36,9 @@ SELECT
36
36
  WHEN 'Y' THEN 'YES'
37
37
  ELSE 'NO'
38
38
  END AS IS_NULLABLE,
39
+ {% if supports_oracle_collation %}
40
+ C.COLLATION AS COLLATION_NAME,
41
+ {% endif %}
39
42
  rc.ROW_COUNT,
40
43
  s.STAT_ROW_COUNT
41
44
  FROM ALL_TAB_COLUMNS C