snowflake-data-validation 1.35.2__tar.gz → 1.36.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 (612) hide show
  1. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/PKG-INFO +18 -1
  2. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/README.md +17 -0
  3. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +8 -8
  4. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +12 -5
  5. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +1 -0
  6. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +5 -1
  7. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +14 -1
  8. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +9 -0
  9. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +14 -1
  10. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +3 -3
  11. snowflake_data_validation-1.36.0/src/snowflake/snowflake_data_validation/oracle/oracle_bfile.py +25 -0
  12. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +7 -2
  13. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +30 -0
  14. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +5 -0
  15. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +1 -0
  16. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/query/numeric_scale_resolution.py +1 -0
  17. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +92 -5
  18. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +1 -0
  19. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +1 -0
  20. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +4 -1
  21. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +301 -0
  22. snowflake_data_validation-1.36.0/src/snowflake/snowflake_data_validation/redshift/redshift_super_normalization.py +94 -0
  23. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +2 -2
  24. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +9 -0
  25. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +58 -1
  26. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +6 -6
  27. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +1 -0
  28. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +5 -1
  29. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +10 -0
  30. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/constants.py +38 -2
  31. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +13 -0
  32. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/interval_common.py +26 -3
  33. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +8 -2
  34. snowflake_data_validation-1.36.0/src/snowflake/snowflake_data_validation/utils/measure_collation.py +63 -0
  35. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +2 -1
  36. snowflake_data_validation-1.36.0/src/snowflake/snowflake_data_validation/utils/semi_structured_json_canonicalization.py +76 -0
  37. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +28 -1
  38. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +51 -0
  39. snowflake_data_validation-1.36.0/tests/unit/Postgresql/test_postgresql_numeric_leading_zero.py +83 -0
  40. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/Redshift/query/test_query_generator_redshift.py +297 -5
  41. snowflake_data_validation-1.36.0/tests/unit/Redshift/test_redshift_super_normalization.py +103 -0
  42. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +1 -1
  43. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +1 -1
  44. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +62 -4
  45. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/oracle/test_oracle_query_generator.py +47 -0
  46. snowflake_data_validation-1.36.0/tests/unit/sqlserver/test_sqlserver_l1_catalog.py +63 -0
  47. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_cell_data_validator.py +104 -0
  48. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_interval_common.py +37 -0
  49. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_iso_dv_common.py +14 -0
  50. snowflake_data_validation-1.36.0/tests/unit/test_l2_collation_metadata.py +119 -0
  51. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_query_generator_numeric_scale.py +96 -4
  52. snowflake_data_validation-1.36.0/tests/unit/test_snowflake_redshift_super_size_guard.py +197 -0
  53. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_table_column_metadata_model.py +14 -12
  54. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_timestamp_golden_vectors.py +6 -3
  55. snowflake_data_validation-1.36.0/tests/unit/utils/test_semi_structured_json_canonicalization.py +88 -0
  56. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/.gitignore +0 -0
  57. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/LICENSE +0 -0
  58. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/docs/README.md +0 -0
  59. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/pyproject.toml +0 -0
  60. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
  61. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
  62. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +0 -0
  63. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
  64. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
  65. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
  66. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
  67. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
  68. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
  69. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
  70. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
  71. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
  72. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
  73. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
  74. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
  75. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
  76. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
  77. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/bigquery/__init__.py +0 -0
  78. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/__init__.py +0 -0
  79. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_cell_validation_data_select.sql.j2 +0 -0
  80. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_column_metrics_templates.yaml +0 -0
  81. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_datatypes_normalization_templates.yaml +0 -0
  82. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_get_columns_metadata.sql.j2 +0 -0
  83. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_count_query.sql.j2 +0 -0
  84. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_row_md5_select.sql.j2 +0 -0
  85. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_table_metadata_query.sql.j2 +0 -0
  86. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/bigquery/extractor/templates/bigquery_to_snowflake_datatypes_mapping_template.yaml +0 -0
  87. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/bigquery/query/__init__.py +0 -0
  88. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/bigquery/query/query_generator_bigquery.py +0 -0
  89. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
  90. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
  91. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
  92. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +0 -0
  93. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +0 -0
  94. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +0 -0
  95. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
  96. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +0 -0
  97. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
  98. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
  99. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
  100. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
  101. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
  102. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
  103. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
  104. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/db2/__init__.py +0 -0
  105. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/db2/extractor/__init__.py +0 -0
  106. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/db2/extractor/metadata_extractor_db2.py +0 -0
  107. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_cell_validation_data_select.sql.j2 +0 -0
  108. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_column_metrics_templates.yaml +0 -0
  109. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_datatypes_normalization_templates.yaml +0 -0
  110. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_get_columns_metadata.sql.j2 +0 -0
  111. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_count_query.sql.j2 +0 -0
  112. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_row_md5_select.sql.j2 +0 -0
  113. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_table_metadata_query.sql.j2 +0 -0
  114. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/db2/extractor/templates/db2_to_snowflake_datatypes_mapping_template.yaml +0 -0
  115. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/db2/query/__init__.py +0 -0
  116. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/db2/query/query_generator_db2.py +0 -0
  117. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/db2/script_writer/__init__.py +0 -0
  118. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/db2/script_writer/script_writer_db2.py +0 -0
  119. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
  120. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
  121. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
  122. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +0 -0
  123. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
  124. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
  125. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +0 -0
  126. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
  127. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
  128. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
  129. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
  130. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
  131. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
  132. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +0 -0
  133. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
  134. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
  135. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
  136. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +0 -0
  137. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
  138. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +0 -0
  139. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/oracle_lob_normalization.py +0 -0
  140. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/oracle_vector_extraction.py +0 -0
  141. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
  142. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
  143. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
  144. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
  145. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
  146. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
  147. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
  148. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +0 -0
  149. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
  150. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
  151. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
  152. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
  153. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
  154. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
  155. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
  156. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
  157. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
  158. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
  159. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
  160. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
  161. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
  162. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
  163. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
  164. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +0 -0
  165. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
  166. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
  167. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
  168. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +0 -0
  169. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +0 -0
  170. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
  171. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
  172. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
  173. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
  174. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/__init__.py +0 -0
  175. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
  176. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
  177. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
  178. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
  179. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
  180. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
  181. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
  182. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
  183. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
  184. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
  185. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
  186. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
  187. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
  188. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
  189. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
  190. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
  191. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
  192. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
  193. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
  194. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
  195. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
  196. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +0 -0
  197. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
  198. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/model/validation_progress_callback.py +0 -0
  199. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
  200. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
  201. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
  202. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +0 -0
  203. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +0 -0
  204. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
  205. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
  206. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
  207. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
  208. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
  209. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
  210. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
  211. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
  212. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
  213. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
  214. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
  215. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
  216. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
  217. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
  218. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
  219. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/query/charset_normalization.py +0 -0
  220. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
  221. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
  222. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
  223. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_modifiers.sql.j2 +0 -0
  224. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/query/float_bit_normalization.py +0 -0
  225. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
  226. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
  227. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/query/vector_element_kind.py +0 -0
  228. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
  229. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
  230. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
  231. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
  232. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
  233. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
  234. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
  235. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
  236. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
  237. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
  238. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
  239. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
  240. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
  241. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -0
  242. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
  243. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
  244. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
  245. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
  246. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/query/charset_normalization.py +0 -0
  247. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +0 -0
  248. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
  249. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
  250. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
  251. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
  252. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
  253. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
  254. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
  255. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
  256. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
  257. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
  258. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
  259. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
  260. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
  261. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
  262. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
  263. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
  264. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
  265. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
  266. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
  267. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
  268. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
  269. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
  270. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +0 -0
  271. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
  272. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
  273. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/l3/__init__.py +0 -0
  274. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/l3/pushdown_diff_sql.py +0 -0
  275. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/l3/signature_external_table.py +0 -0
  276. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/l3/warm_start.py +0 -0
  277. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
  278. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
  279. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
  280. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
  281. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
  282. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/query/charset_normalization.py +0 -0
  283. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
  284. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
  285. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +0 -0
  286. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/__init__.py +0 -0
  287. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +0 -0
  288. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +0 -0
  289. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +0 -0
  290. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/__init__.py +0 -0
  291. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +0 -0
  292. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +0 -0
  293. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +0 -0
  294. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +0 -0
  295. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +0 -0
  296. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +0 -0
  297. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +0 -0
  298. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
  299. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +0 -0
  300. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +0 -0
  301. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +0 -0
  302. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +0 -0
  303. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +0 -0
  304. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +0 -0
  305. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +0 -0
  306. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +0 -0
  307. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +0 -0
  308. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +0 -0
  309. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
  310. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
  311. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
  312. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
  313. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
  314. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
  315. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
  316. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
  317. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
  318. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
  319. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
  320. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +0 -0
  321. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
  322. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
  323. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
  324. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
  325. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
  326. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
  327. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/query/charset_normalization.py +0 -0
  328. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
  329. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
  330. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +0 -0
  331. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
  332. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
  333. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
  334. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
  335. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
  336. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
  337. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
  338. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
  339. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +0 -0
  340. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
  341. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
  342. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
  343. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +0 -0
  344. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
  345. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
  346. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
  347. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
  348. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +0 -0
  349. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
  350. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
  351. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
  352. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
  353. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/query/charset_normalization.py +0 -0
  354. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +0 -0
  355. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
  356. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
  357. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +0 -0
  358. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +0 -0
  359. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
  360. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +0 -0
  361. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +0 -0
  362. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
  363. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
  364. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +0 -0
  365. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
  366. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
  367. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
  368. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
  369. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +0 -0
  370. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
  371. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
  372. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
  373. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
  374. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
  375. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
  376. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
  377. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
  378. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
  379. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
  380. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/iceberg_dv_common.py +0 -0
  381. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
  382. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
  383. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
  384. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
  385. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
  386. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
  387. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +0 -0
  388. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
  389. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
  390. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/qvci_fallback.py +0 -0
  391. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
  392. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
  393. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
  394. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
  395. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
  396. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
  397. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/teradata_string_rtrim.py +0 -0
  398. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
  399. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
  400. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/vector_common.py +0 -0
  401. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/utils/vector_normalization.py +0 -0
  402. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
  403. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
  404. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +0 -0
  405. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +0 -0
  406. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
  407. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +0 -0
  408. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/metrics_tolerance.py +0 -0
  409. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/__init__.py +0 -0
  410. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/base.py +0 -0
  411. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/db2.py +0 -0
  412. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/redshift.py +0 -0
  413. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/registry.py +0 -0
  414. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/snowflake.py +0 -0
  415. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlite.py +0 -0
  416. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/sqlserver.py +0 -0
  417. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/platform_text_codec/teradata.py +0 -0
  418. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
  419. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
  420. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
  421. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
  422. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
  423. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
  424. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
  425. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
  426. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
  427. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
  428. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
  429. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
  430. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/.coveragerc +0 -0
  431. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/conftest.py +0 -0
  432. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/integration/.coveragerc +0 -0
  433. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
  434. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/integration/test_async_generation_integration.py +0 -0
  435. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/integration/test_async_validation_integration.py +0 -0
  436. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/integration/test_reference_integration.py +0 -0
  437. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/integration/test_source_validation_integration.py +0 -0
  438. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/integration/test_sync_validation_integration.py +0 -0
  439. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/Postgresql/test_postgresql_spatial_templates.py +0 -0
  440. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
  441. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
  442. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/Redshift/test_connector_redshift.py +0 -0
  443. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/Redshift/test_redshift_arguments_manager.py +0 -0
  444. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/Redshift/test_redshift_hllsketch_templates.py +0 -0
  445. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/Redshift/test_redshift_spatial_templates.py +0 -0
  446. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/Redshift/test_redshift_varchar_count_distinct.py +0 -0
  447. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/Teradata/test_connector_teradata.py +0 -0
  448. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
  449. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
  450. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/Teradata/test_teradata_row_md5_select_template.py +0 -0
  451. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/Teradata/test_teradata_spatial_templates.py +0 -0
  452. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/Teradata/test_teradata_view_generate_boundary.py +0 -0
  453. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/Teradata/test_teradata_view_l1_metadata_templates.py +0 -0
  454. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/__init__.py +0 -0
  455. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
  456. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
  457. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
  458. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
  459. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
  460. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
  461. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
  462. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
  463. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
  464. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
  465. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
  466. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
  467. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
  468. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
  469. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
  470. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/azure_synapse/__init__.py +0 -0
  471. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
  472. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
  473. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
  474. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
  475. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/bigquery/__init__.py +0 -0
  476. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/bigquery/test_bigquery_spatial_templates.py +0 -0
  477. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/bigquery/test_query_generator_bigquery.py +0 -0
  478. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/bigquery/test_query_generator_factory_bigquery.py +0 -0
  479. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/db2/__init__.py +0 -0
  480. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/db2/test_db2_metadata_extractor.py +0 -0
  481. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/db2/test_db2_query_generator.py +0 -0
  482. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/db2/test_db2_registration.py +0 -0
  483. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/oracle/__init__.py +0 -0
  484. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/oracle/test_metadata_extractor_oracle_vector.py +0 -0
  485. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/oracle/test_oracle_iso_normalization.py +0 -0
  486. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/oracle/test_oracle_lob_dv_generation.py +0 -0
  487. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/oracle/test_oracle_lob_normalization.py +0 -0
  488. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
  489. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
  490. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
  491. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/oracle/test_oracle_query_modifiers.py +0 -0
  492. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/oracle/test_oracle_type_mappings.py +0 -0
  493. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
  494. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/snowflake/test_snowflake_spatial_metrics_templates.py +0 -0
  495. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/sqlite/__init__.py +0 -0
  496. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/sqlite/test_connector_factory_sqlite.py +0 -0
  497. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/sqlite/test_connector_sqlite.py +0 -0
  498. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/sqlite/test_metadata_extractor_sqlite.py +0 -0
  499. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/sqlite/test_metadata_query_template_sqlite.py +0 -0
  500. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/sqlite/test_query_generator_sqlite.py +0 -0
  501. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/sqlite/test_script_writer_sqlite.py +0 -0
  502. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/sqlserver/__init__.py +0 -0
  503. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/sqlserver/test_connector_factory_sql_server.py +0 -0
  504. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/sqlserver/test_metadata_extractor_sqlserver_vector.py +0 -0
  505. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/sqlserver/test_sqlserver_row_queries.py +0 -0
  506. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/sqlserver/test_sqlserver_spatial_l1_metadata.py +0 -0
  507. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/sqlserver/test_sqlserver_spatial_metrics_templates.py +0 -0
  508. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_accepted_transformation.py +0 -0
  509. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_arguments_manager_base.py +0 -0
  510. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_arguments_manager_factory.py +0 -0
  511. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_batched_metrics_queries.py +0 -0
  512. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_boolean_binary_canonical_templates.py +0 -0
  513. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_cell_validation_query_generation.py +0 -0
  514. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_charset_normalization.py +0 -0
  515. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_column_grouping.py +0 -0
  516. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_column_metadata.py +0 -0
  517. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_column_normalization_override.py +0 -0
  518. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_column_partitioning_strategy.py +0 -0
  519. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_comparison_codec.py +0 -0
  520. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_comparison_orchestrator.py +0 -0
  521. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_configuration_file_editor.py +0 -0
  522. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_configuration_file_generator.py +0 -0
  523. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_configuration_file_synchronizer.py +0 -0
  524. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_configuration_loader.py +0 -0
  525. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_configuration_model.py +0 -0
  526. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_connection_pool.py +0 -0
  527. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_connector_failure_tracker.py +0 -0
  528. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_connector_snowflake.py +0 -0
  529. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_cpu_optimizer.py +0 -0
  530. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_custom_templates_models.py +0 -0
  531. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_data_validator.py +0 -0
  532. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_escape_odbc_value.py +0 -0
  533. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_executor_factory.py +0 -0
  534. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_float_bit_canonical.py +0 -0
  535. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_float_canonical_templates.py +0 -0
  536. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_get_configuration_file.py +0 -0
  537. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_get_target_cols.py +0 -0
  538. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_helper_dataframe.py +0 -0
  539. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_helper_polars_cast.py +0 -0
  540. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_helpers.py +0 -0
  541. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_html_report_builder.py +0 -0
  542. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_iceberg_dv_l3_normalization.py +0 -0
  543. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_index_key_format.py +0 -0
  544. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_internal_helpers.py +0 -0
  545. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_logging_config.py +0 -0
  546. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_metrics_reshape.py +0 -0
  547. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_metrics_result_shape.py +0 -0
  548. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_metrics_templates_casts.py +0 -0
  549. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_metrics_tolerance.py +0 -0
  550. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_normalize_shape_aware.py +0 -0
  551. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_numeric_scale_resolution.py +0 -0
  552. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_platform_bridge.py +0 -0
  553. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_postgresql_normalization_templates.py +0 -0
  554. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_postgresql_tz_normalization.py +0 -0
  555. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_pushdown_diff_sql.py +0 -0
  556. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_query_cell_level_validation.py +0 -0
  557. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_query_metrics_level_validation.py +0 -0
  558. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_query_to_dataframe.py +0 -0
  559. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_query_validator.py +0 -0
  560. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_qvci_fallback.py +0 -0
  561. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_qvci_fallback_na_skip.py +0 -0
  562. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_qvci_fallback_triggers.py +0 -0
  563. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_report_metadata.py +0 -0
  564. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_result_set_cell_level_validation.py +0 -0
  565. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
  566. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_result_set_snapshot_generation.py +0 -0
  567. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_result_set_snapshot_validation.py +0 -0
  568. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_result_set_to_dataframe.py +0 -0
  569. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_result_set_validator.py +0 -0
  570. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_row_data_validator.py +0 -0
  571. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_row_hash_column_delimiter.py +0 -0
  572. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_row_partitioning_strategy.py +0 -0
  573. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_row_validation_report_buffer.py +0 -0
  574. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_shutdown_coordinator.py +0 -0
  575. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_signature_external_table.py +0 -0
  576. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_signature_row_md5_query.py +0 -0
  577. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_snapshot_validation_statements.py +0 -0
  578. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_snowflake_arguments_manager.py +0 -0
  579. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
  580. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_source_validation_executor.py +0 -0
  581. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_spatial_wkt_canonicalization.py +0 -0
  582. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_sql_catalog_template_guard.py +0 -0
  583. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_sql_literal_jinja_filter.py +0 -0
  584. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_sqlite_validation_connection.py +0 -0
  585. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_sqlserver_arguments_manager.py +0 -0
  586. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
  587. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_sync_executor_qvci_fallback.py +0 -0
  588. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_sync_validation_executor.py +0 -0
  589. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_table_configuration.py +0 -0
  590. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_table_context.py +0 -0
  591. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_table_metadata_processor.py +0 -0
  592. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_table_snapshot_generation.py +0 -0
  593. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_table_snapshot_validation.py +0 -0
  594. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_target_platform_factory.py +0 -0
  595. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_telemetry.py +0 -0
  596. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_templates_loader_manager.py +0 -0
  597. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_teradata_iso_normalization.py +0 -0
  598. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_teradata_string_rtrim_policy.py +0 -0
  599. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_validation_configuration.py +0 -0
  600. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_validation_database_connection.py +0 -0
  601. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_validation_execution_context.py +0 -0
  602. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_validation_progress_reporter.py +0 -0
  603. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_validation_report_buffer.py +0 -0
  604. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_validation_report_status.py +0 -0
  605. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_validation_templates_dto.py +0 -0
  606. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_vector_bit_normalization.py +0 -0
  607. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_vector_common.py +0 -0
  608. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_vector_normalization.py +0 -0
  609. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_view_configuration.py +0 -0
  610. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/test_warm_start.py +0 -0
  611. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/utils/__init__.py +0 -0
  612. {snowflake_data_validation-1.35.2 → snowflake_data_validation-1.36.0}/tests/unit/utils/test_constants.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: snowflake-data-validation
3
- Version: 1.35.2
3
+ Version: 1.36.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,23 @@ For configuration options and examples, see the [official documentation](https:/
188
188
 
189
189
  ## Changelog
190
190
 
191
+ ### v1.36.0
192
+
193
+ **New features**
194
+
195
+ - Added Oracle `BFILE` locator migration support.
196
+
197
+ **Improvements**
198
+
199
+ - Improved SQL Server L1 validation by binding source catalogs and qualifying object references.
200
+
201
+ **Bug fixes**
202
+
203
+ - Fixed Redshift `SUPER` columns being read as `NULL` by the validator.
204
+ - Fixed parameterized numeric type matching against bare normalization keys.
205
+ - Fixed Snowflake `TO_CHAR` mask overflow by clamping to the 38-digit budget.
206
+ - Fixed mixed-interval column binding in Jinja templates before `pyodbc` evaluation.
207
+
191
208
  ### v1.35.2
192
209
 
193
210
  **New features**
@@ -99,6 +99,23 @@ For configuration options and examples, see the [official documentation](https:/
99
99
 
100
100
  ## Changelog
101
101
 
102
+ ### v1.36.0
103
+
104
+ **New features**
105
+
106
+ - Added Oracle `BFILE` locator migration support.
107
+
108
+ **Improvements**
109
+
110
+ - Improved SQL Server L1 validation by binding source catalogs and qualifying object references.
111
+
112
+ **Bug fixes**
113
+
114
+ - Fixed Redshift `SUPER` columns being read as `NULL` by the validator.
115
+ - Fixed parameterized numeric type matching against bare normalization keys.
116
+ - Fixed Snowflake `TO_CHAR` mask overflow by clamping to the 38-digit budget.
117
+ - Fixed mixed-interval column binding in Jinja templates before `pyodbc` evaluation.
118
+
102
119
  ### v1.35.2
103
120
 
104
121
  **New features**
@@ -326,7 +326,7 @@ CHAR:
326
326
  metric_query: SUM(CASE WHEN DATALENGTH(RTRIM("{{ col_name }}")) = 0 THEN 1 ELSE 0 END)
327
327
  metric_return_datatype: INT
328
328
  count_distinct:
329
- metric_query: COUNT(DISTINCT RTRIM("{{ col_name }}"))
329
+ metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}RTRIM("{{ col_name }}"){{ measure_collation_suffix }})
330
330
  metric_return_datatype: INT
331
331
  count_null:
332
332
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
@@ -350,7 +350,7 @@ VARCHAR:
350
350
  metric_query: SUM(CASE WHEN DATALENGTH("{{ col_name }}") = 0 THEN 1 ELSE 0 END)
351
351
  metric_return_datatype: INT
352
352
  count_distinct:
353
- metric_query: COUNT(DISTINCT CAST('|' + "{{ col_name }}" + '|' AS VARCHAR(MAX)))
353
+ metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}CAST('|' + "{{ col_name }}" + '|' AS VARCHAR(MAX)){{ measure_collation_suffix }})
354
354
  metric_return_datatype: INT
355
355
  count_null:
356
356
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
@@ -370,7 +370,7 @@ NCHAR:
370
370
  metric_query: SUM(CASE WHEN RTRIM("{{ col_name }}") = '' THEN 1 ELSE 0 END)
371
371
  metric_return_datatype: INT
372
372
  count_distinct:
373
- metric_query: COUNT(DISTINCT RTRIM("{{ col_name }}"))
373
+ metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}RTRIM("{{ col_name }}"){{ measure_collation_suffix }})
374
374
  metric_return_datatype: INT
375
375
  count_null:
376
376
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
@@ -390,7 +390,7 @@ NVARCHAR:
390
390
  metric_query: SUM(CASE WHEN "{{ col_name }}" = '' THEN 1 ELSE 0 END)
391
391
  metric_return_datatype: INT
392
392
  count_distinct:
393
- metric_query: COUNT(DISTINCT CAST('|' + "{{ col_name }}" + '|' AS VARCHAR(MAX)))
393
+ metric_query: COUNT(DISTINCT {{ measure_collation_prefix }}CAST(N'|' + CAST("{{ col_name }}" AS NVARCHAR(MAX)) + N'|' AS NVARCHAR(MAX)){{ measure_collation_suffix }})
394
394
  metric_return_datatype: INT
395
395
  count_null:
396
396
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
@@ -437,11 +437,11 @@ DATETIME2:
437
437
  min:
438
438
  metric_query: MIN("{{ col_name }}")
439
439
  metric_return_datatype: DATETIME2
440
- metric_normalization: FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00'
440
+ metric_normalization: LEFT(FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000'
441
441
  max:
442
442
  metric_query: MAX("{{ col_name }}")
443
443
  metric_return_datatype: DATETIME2
444
- metric_normalization: FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00'
444
+ metric_normalization: LEFT(FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000'
445
445
  count_null:
446
446
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
447
447
  metric_return_datatype: INT
@@ -463,11 +463,11 @@ DATETIMEOFFSET:
463
463
  min:
464
464
  metric_query: MIN("{{ col_name }}")
465
465
  metric_return_datatype: DATETIMEOFFSET
466
- metric_normalization: FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00' + FORMAT({{ metric_query }}, 'zzz')
466
+ metric_normalization: LEFT(FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000' + FORMAT({{ metric_query }}, 'zzz')
467
467
  max:
468
468
  metric_query: MAX("{{ col_name }}")
469
469
  metric_return_datatype: DATETIMEOFFSET
470
- metric_normalization: FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00' + FORMAT({{ metric_query }}, 'zzz')
470
+ metric_normalization: LEFT(FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000' + FORMAT({{ metric_query }}, 'zzz')
471
471
  count_null:
472
472
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
473
473
  metric_return_datatype: INT
@@ -31,22 +31,29 @@ NCHAR: RTRIM("{{ col_name }}")
31
31
  NVARCHAR: '"{{ col_name }}"'
32
32
 
33
33
  # ---- Date / Time types ----
34
- # Append '00' to FORMAT('.fffffff') so the output reaches FF9 (Snowflake TIMESTAMP_NTZ format).
35
- # Use '+' (not CONCAT) so a NULL input propagates to NULL — CONCAT would coerce NULL to ''.
34
+ # DATETIME keeps 7 fractional digits + '00' pad to FF9.
35
+ # DATETIME2 / DATETIMEOFFSET: Snowflake TIMESTAMP_* stores microseconds. FORMAT
36
+ # '.fffffff' keeps the 7th digit (e.g. .999999900) while Snowflake TO_CHAR FF9
37
+ # emits .999999000 for the truncated mirror. Truncate to 6 fractional digits
38
+ # then pad '000' so hashes match ODBC/microsecond storage. LEFT keeps NULL.
39
+ # Use '+' (not CONCAT) so a NULL input propagates to NULL.
36
40
  # FORMAT(..., 'zzz') reliably emits '+HH:MM'/'-HH:MM' for every offset, including UTC.
37
41
  DATE: FORMAT("{{ col_name }}", 'yyyy-MM-dd')
38
42
  TIME: CONVERT(VARCHAR(8), "{{ col_name }}", 108)
39
43
  DATETIME: FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00'
40
- DATETIME2: FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00'
44
+ DATETIME2: LEFT(FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000'
41
45
  SMALLDATETIME: FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.000000000')
42
- DATETIMEOFFSET: FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00' + FORMAT("{{ col_name }}", 'zzz')
46
+ DATETIMEOFFSET: LEFT(FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.fffffff'), 26) + '000' + FORMAT("{{ col_name }}", 'zzz')
43
47
 
44
48
  # ---- Binary types ----
45
49
  BINARY: UPPER(CONVERT(VARCHAR(MAX), "{{ col_name }}", 2))
46
50
  VARBINARY: UPPER(CONVERT(VARCHAR(MAX), "{{ col_name }}", 2))
47
51
 
48
52
  # ---- Other types ----
49
- UNIQUEIDENTIFIER: LOWER(CONVERT(VARCHAR(36), "{{ col_name }}"))
53
+ # Azure Synapse dedicated SQL pool always normalizes UNIQUEIDENTIFIER hex digits
54
+ # to uppercase regardless of input casing. Use UPPER so the canonical string
55
+ # matches the DV cases and Snowflake's VARCHAR-based representation.
56
+ UNIQUEIDENTIFIER: UPPER(CONVERT(VARCHAR(36), "{{ col_name }}"))
50
57
  SYSNAME: CONVERT(VARCHAR(128), "{{ col_name }}")
51
58
 
52
59
  # ---- Default fallback ----
@@ -31,6 +31,7 @@ SELECT
31
31
  END AS character_length,
32
32
  CASE WHEN c.precision = 0 THEN NULL ELSE c.precision END AS precision,
33
33
  CASE WHEN c.precision = 0 THEN NULL ELSE c.scale END AS scale,
34
+ c.collation_name AS collation_name,
34
35
  CASE
35
36
  WHEN t.name IN ('decimal', 'numeric')
36
37
  THEN
@@ -15,12 +15,16 @@ WITH rc_cte AS (
15
15
  END AS CHARACTER_MAXIMUM_LENGTH,
16
16
  C.NUMERIC_PRECISION AS NUMERIC_PRECISION,
17
17
  C.NUMERIC_SCALE AS NUMERIC_SCALE,
18
+ C.COLLATION_NAME AS COLLATION_NAME,
18
19
  C.IS_NULLABLE AS IS_NULLABLE,
19
20
  rc.ROW_COUNT
20
- FROM INFORMATION_SCHEMA.COLUMNS C
21
+ FROM {% if object_database_ref %}{{ object_database_ref }}.{% endif %}INFORMATION_SCHEMA.COLUMNS C
21
22
  CROSS JOIN rc_cte rc
22
23
  WHERE C.TABLE_NAME = '{{ object_name | escape_sql_literal }}'
23
24
  AND C.TABLE_SCHEMA = '{{ object_schema | escape_sql_literal }}'
25
+ {% if object_database %}
26
+ AND C.TABLE_CATALOG = '{{ object_database | escape_sql_literal }}'
27
+ {% endif %}
24
28
  {% if columns %}
25
29
  AND C.COLUMN_NAME IN (
26
30
  {% for column in columns %}
@@ -67,6 +67,16 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
67
67
  """Initialize the Azure Synapse query generator."""
68
68
  super().__init__(platform=Platform.AZURE_SYNAPSE)
69
69
 
70
+ def _measure_collation_tokens(self, column, metric_name: str) -> tuple[str, str]:
71
+ character_types = {"CHAR", "NCHAR", "VARCHAR", "NVARCHAR"}
72
+ if (
73
+ metric_name == "count_distinct"
74
+ and self._base_data_type(column) in character_types
75
+ and self._has_source_collation_metadata(column)
76
+ ):
77
+ return "", " COLLATE Latin1_General_BIN2"
78
+ return "", ""
79
+
70
80
  def _float_column_reference(self, column) -> str:
71
81
  return f'"{column.name}"'
72
82
 
@@ -96,7 +106,10 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
96
106
  rendered: dict[str, str] = {}
97
107
  for column in table_context.columns_to_validate:
98
108
  lookup_key = (column.data_type or "").strip().upper()
99
- normalization_template = datatypes_normalization_templates.get(lookup_key)
109
+ normalization_template = self._lookup_normalization_template(
110
+ datatypes_normalization_templates,
111
+ lookup_key,
112
+ )
100
113
  if normalization_template is None:
101
114
  LOGGER.debug(
102
115
  "No normalization template for data type %s, using DEFAULT.",
@@ -37,6 +37,9 @@ from snowflake.snowflake_data_validation.utils.context import Context
37
37
  from snowflake.snowflake_data_validation.utils.iso_dv_common import (
38
38
  attach_paired_column_types_for_iso_timestamp_dv,
39
39
  )
40
+ from snowflake.snowflake_data_validation.utils.measure_collation import (
41
+ mark_target_columns_for_normalized_measure_collation,
42
+ )
40
43
  from snowflake.snowflake_data_validation.utils.model.table_column_metadata import (
41
44
  TableColumnMetadata,
42
45
  )
@@ -122,6 +125,12 @@ class BaseValidationExecutor(ABC):
122
125
  )
123
126
 
124
127
  if validations[METRICS_VALIDATION_KEY]:
128
+ target_table_context.columns = mark_target_columns_for_normalized_measure_collation(
129
+ source_table_context.platform,
130
+ source_table_context.columns,
131
+ target_table_context.columns,
132
+ table_configuration.column_mappings,
133
+ )
125
134
  self.execute_metrics_validation(
126
135
  source_table_context=source_table_context,
127
136
  target_table_context=target_table_context,
@@ -146,11 +146,16 @@ class SQLQueriesTemplateGenerator:
146
146
  query_modifiers=query_modifiers or QueryModifiersTemplateContext.empty(),
147
147
  object_type=object_type_str,
148
148
  is_view=object_type_str == "VIEW",
149
+ object_database_ref="",
149
150
  )
150
151
  if platform == Platform.SNOWFLAKE.value:
151
152
  from snowflake.snowflake_data_validation.utils.helpers.helper_database import HelperDatabase
152
153
 
153
154
  render_kwargs["object_database_ref"] = HelperDatabase.snowflake_identifier_ref(database_name)
155
+ elif platform in (Platform.SQLSERVER.value, Platform.AZURE_SYNAPSE.value) and database_name:
156
+ from snowflake.snowflake_data_validation.utils.helpers.helper_database import HelperDatabase
157
+
158
+ render_kwargs["object_database_ref"] = HelperDatabase.sqlserver_identifier_ref(database_name)
154
159
  try:
155
160
  return self._render(
156
161
  template_file,
@@ -494,8 +499,15 @@ class SQLQueriesTemplateGenerator:
494
499
  where_clause: str,
495
500
  order_by_columns: list[str] | None,
496
501
  query_modifiers: QueryModifiersTemplateContext | None = None,
502
+ extra_from_joins: list[str] | None = None,
497
503
  ) -> str:
498
- """Render a SELECT that applies the same per-type normalization as L3 MD5."""
504
+ """Render a SELECT that applies the same per-type normalization as L3 MD5.
505
+
506
+ ``extra_from_joins`` (Redshift SUPER sorted-object joins) is an optional
507
+ list of ``LEFT JOIN ...`` fragments appended to the inner FROM clause;
508
+ templates that don't reference it are unaffected (Jinja Undefined is
509
+ falsy in ``{% if %}``).
510
+ """
499
511
  template_file = f"{platform}_cell_validation_data_select.sql.j2"
500
512
  try:
501
513
  return self._render(
@@ -507,6 +519,7 @@ class SQLQueriesTemplateGenerator:
507
519
  where_clause=where_clause,
508
520
  order_by_columns=order_by_columns or [],
509
521
  query_modifiers=query_modifiers or QueryModifiersTemplateContext.empty(),
522
+ extra_from_joins=extra_from_joins or [],
510
523
  )
511
524
  except jinja2.exceptions.TemplateNotFound:
512
525
  raise ValueError(f"Template not found: {template_file}. Please create it in the {self.template_dir} directory.") from None
@@ -51,9 +51,9 @@ RAW: RAWTOHEX({{ col_name }})
51
51
  LONG RAW: RAWTOHEX({{ col_name }})
52
52
  # MD5 the whole BLOB with DBMS_CRYPTO.HASH (see CLOB above). CASE-guarded for NULL.
53
53
  BLOB: CASE WHEN {{ col_name }} IS NULL THEN NULL ELSE RAWTOHEX(DBMS_CRYPTO.HASH({{ col_name }}, 2)) END
54
- # BFILE is an external file locator; DBMS_CRYPTO cannot hash it, so it stays on a
55
- # bounded DBMS_LOB read.
56
- BFILE: RAWTOHEX(DBMS_LOB.SUBSTR({{ col_name }}, 4000, 1))
54
+ # Validate the same DIRECTORY/filename locator text produced by migration.
55
+ # QueryGeneratorOracle adds the statement-local helper that implements this call.
56
+ BFILE: DMVF_BFILE_TO_PATH({{ col_name }})
57
57
 
58
58
  # ---- Row address types ----
59
59
  # ROWID and UROWID are stored as opaque row-address strings; NVL is sufficient.
@@ -0,0 +1,25 @@
1
+ """Shared Oracle ``BFILE`` locator extraction SQL."""
2
+
3
+ ORACLE_BFILE_TO_PATH_FUNCTION_NAME = "DMVF_BFILE_TO_PATH"
4
+ ORACLE_BFILE_EXTRACTION = f"{ORACLE_BFILE_TO_PATH_FUNCTION_NAME}({{col}})"
5
+ ORACLE_BFILE_NORMALIZATION = (
6
+ f"{ORACLE_BFILE_TO_PATH_FUNCTION_NAME}({{{{ col_name }}}})"
7
+ )
8
+ ORACLE_BFILE_WITH_FUNCTION = f"""WITH FUNCTION {ORACLE_BFILE_TO_PATH_FUNCTION_NAME}(value BFILE)
9
+ RETURN VARCHAR2 IS
10
+ directory_name VARCHAR2(128);
11
+ file_name VARCHAR2(4000);
12
+ BEGIN
13
+ IF value IS NULL THEN
14
+ RETURN NULL;
15
+ END IF;
16
+ DBMS_LOB.FILEGETNAME(value, directory_name, file_name);
17
+ RETURN directory_name || '/' || file_name;
18
+ END;
19
+ """
20
+
21
+
22
+ def prepend_oracle_bfile_function(sql: str) -> str:
23
+ """Add the statement-local helper when SQL contains a BFILE path call."""
24
+ marker = f"{ORACLE_BFILE_TO_PATH_FUNCTION_NAME}("
25
+ return ORACLE_BFILE_WITH_FUNCTION + sql if marker in sql else sql
@@ -37,6 +37,9 @@ import pandas as pd
37
37
  from snowflake.snowflake_data_validation.oracle.extractor.metadata_extractor_oracle import (
38
38
  normalize_oracle_type,
39
39
  )
40
+ from snowflake.snowflake_data_validation.oracle.oracle_bfile import (
41
+ prepend_oracle_bfile_function,
42
+ )
40
43
  from snowflake.snowflake_data_validation.oracle.oracle_iso_normalization import (
41
44
  resolve_oracle_timestamp_metric_normalization,
42
45
  resolve_oracle_timestamp_normalization_template,
@@ -253,7 +256,7 @@ class QueryGeneratorOracle(QueryGeneratorBase):
253
256
  if order_by:
254
257
  order_by_columns = [col.name for col in table_context.index_column_collection]
255
258
 
256
- return table_context.sql_generator.generate_row_md5_select_query(
259
+ sql = table_context.sql_generator.generate_row_md5_select_query(
257
260
  platform=self.platform.value,
258
261
  index_column_collection=table_context.index_column_collection,
259
262
  column_names_separate_by_comma=table_context.join_column_names_for_row_hash(),
@@ -265,6 +268,7 @@ class QueryGeneratorOracle(QueryGeneratorBase):
265
268
  column_groups=table_context.column_groups,
266
269
  order_by_columns=order_by_columns,
267
270
  )
271
+ return prepend_oracle_bfile_function(sql)
268
272
 
269
273
  def generate_cell_validation_data_query(
270
274
  self,
@@ -290,7 +294,7 @@ class QueryGeneratorOracle(QueryGeneratorBase):
290
294
  column_normalization_map,
291
295
  )
292
296
 
293
- return table_context.sql_generator.generate_cell_validation_data_select_query(
297
+ sql = table_context.sql_generator.generate_cell_validation_data_select_query(
294
298
  platform=table_context.platform.value,
295
299
  column_collection=table_context.columns_to_validate,
296
300
  datatypes_normalization_renderer_templates=datatypes_normalization_renderer_templates,
@@ -300,6 +304,7 @@ class QueryGeneratorOracle(QueryGeneratorBase):
300
304
  order_by_columns=order_by_columns,
301
305
  query_modifiers=resolve_table_context_modifiers(table_context),
302
306
  )
307
+ return prepend_oracle_bfile_function(sql)
303
308
 
304
309
  def _generate_compute_md5_chunk_query(
305
310
  self,
@@ -36,6 +36,7 @@ from snowflake.snowflake_data_validation.query.vector_element_kind import (
36
36
  from snowflake.snowflake_data_validation.utils.constants import (
37
37
  NULL_HASHING_SENTINEL,
38
38
  NULL_HASHING_SENTINEL_KEY,
39
+ NUMERIC_FORMAT_MASK_PLACEHOLDER,
39
40
  ROW_HASH_COLUMN_DELIMITER,
40
41
  ROW_HASH_COLUMN_DELIMITER_KEY,
41
42
  Platform,
@@ -69,6 +70,27 @@ def build_postgresql_vector_bit_shim(col_ref: str, element) -> str:
69
70
  return f"CASE WHEN {col_ref} IS NULL THEN NULL ELSE ({inner}) END"
70
71
 
71
72
 
73
+ def build_postgresql_numeric_canonical_expr(col_ref: str, format_mask: str, scale: int) -> str:
74
+ """Restore FM leading zeros PostgreSQL omits for |v| < 1 to match Snowflake ``TO_VARCHAR``.
75
+
76
+ ``TO_CHAR`` with an ``FM`` mask renders ``|v| < 1`` without the integer zero
77
+ (``.0001``), while Snowflake ``TO_VARCHAR`` keeps it (``0.0001``). Prefix the missing
78
+ zero (handling the negative ``-.0001`` case) so row hashes and L3 cell comparisons stay
79
+ aligned. Mirrors Oracle / Teradata / Snowflake / Redshift, each of which restores the
80
+ leading zero in its own wrapper.
81
+
82
+ Exact zeros short-circuit because a mask-rendered zero carries no integer digit at all.
83
+ """
84
+ zero_literal = f"0.{'0' * scale}" if scale > 0 else "0"
85
+ inner = f"TRIM(TO_CHAR(CAST({col_ref} AS NUMERIC), '{format_mask}'))"
86
+ return (
87
+ f"CASE WHEN {col_ref} IS NULL THEN NULL "
88
+ f"WHEN {col_ref} = 0 THEN '{zero_literal}' "
89
+ f"ELSE TRIM(REGEXP_REPLACE("
90
+ f"TRIM(REGEXP_REPLACE({inner}, '^-\\.', '-0.')), '^\\.', '0.')) END"
91
+ )
92
+
93
+
72
94
  class QueryGeneratorPostgresql(QueryGeneratorBase):
73
95
  """Query generator for PostgreSQL (chunked MD5 pipeline aligned with Redshift)."""
74
96
 
@@ -97,6 +119,14 @@ class QueryGeneratorPostgresql(QueryGeneratorBase):
97
119
  element = vector_element_kind(getattr(column, "data_type", "") or "")
98
120
  return build_postgresql_vector_bit_shim(col_ref, element)
99
121
 
122
+ def render_normalization_template(self, template: str, column) -> str:
123
+ """Wrap numeric ``TO_CHAR`` output to restore the FM-suppressed leading zero."""
124
+ if NUMERIC_FORMAT_MASK_PLACEHOLDER in template and "TO_CHAR" in template and self._is_numeric_normalization_type(column.data_type):
125
+ scale = self._resolve_numeric_scale(column)
126
+ mask = self._build_numeric_format_mask(scale)
127
+ return build_postgresql_numeric_canonical_expr(f'"{column.name}"', mask, scale)
128
+ return super().render_normalization_template(template, column)
129
+
100
130
  def _render_normalization_template(self, template: str, column) -> str:
101
131
  return super()._render_normalization_template(template, column)
102
132
 
@@ -37,6 +37,7 @@ def validate_cell(
37
37
  table_context: TableContext,
38
38
  index_columns: list[str] | None = None,
39
39
  target_index_columns: list[str] | None = None,
40
+ semi_structured_columns: frozenset[str] | None = None,
40
41
  ) -> tuple[ValidationResult, list[DuplicateKeyInfo]]:
41
42
  """Validate individual cell values between source and target.
42
43
 
@@ -58,6 +59,9 @@ def validate_cell(
58
59
  When ``None``, rows are matched positionally.
59
60
  target_index_columns: Target-side key column names.
60
61
  Defaults to *index_columns* when ``None``.
62
+ semi_structured_columns: Source-side column names needing recursive
63
+ JSON canonicalization (e.g. a Redshift SUPER column paired with
64
+ a Snowflake VARIANT mirror) instead of a plain string compare.
61
65
 
62
66
  Returns:
63
67
  A tuple of ``(ValidationResult, duplicate_key_infos)`` where
@@ -78,6 +82,7 @@ def validate_cell(
78
82
  target_index_columns=target_index_columns,
79
83
  platform=table_context.platform.value,
80
84
  object_id=table_context.id,
85
+ semi_structured_columns=semi_structured_columns,
81
86
  )
82
87
 
83
88
  return (
@@ -47,6 +47,7 @@ _SCHEMA_MIGRATION_MAPPING_ENRICH_PLATFORMS: frozenset[Platform] = frozenset(
47
47
  Platform.ORACLE,
48
48
  Platform.SQLSERVER,
49
49
  Platform.REDSHIFT,
50
+ Platform.AZURE_SYNAPSE,
50
51
  }
51
52
  )
52
53
 
@@ -46,6 +46,7 @@ _MONEY_SCALE_BY_TYPE = {
46
46
 
47
47
  # Snowflake NUMBER(p, s): max 38 total digits, max 37 fractional digits.
48
48
  SNOWFLAKE_MAX_NUMBER_SCALE = 37
49
+ SNOWFLAKE_MAX_NUMBER_PRECISION = 38
49
50
 
50
51
 
51
52
  def parse_scale_value(raw: object) -> int | None:
@@ -34,22 +34,32 @@ from snowflake.snowflake_data_validation.query.charset_normalization import (
34
34
  DefaultCharacterSetResolver,
35
35
  )
36
36
  from snowflake.snowflake_data_validation.query.numeric_scale_resolution import (
37
+ SNOWFLAKE_MAX_NUMBER_PRECISION,
37
38
  clamp_scale_for_platform,
38
39
  )
39
40
  from snowflake.snowflake_data_validation.utils.constants import (
41
+ APPLY_NORMALIZED_MEASURE_COLLATION_PROPERTY,
40
42
  COL_NAME_NO_QUOTES_PLACEHOLDER,
43
+ COLLATION_NAME_PROPERTY,
41
44
  COLUMN_MODIFIER_COLUMN_KEY,
42
45
  DEFAULT_MAX_COLUMNS_PER_METRICS_BATCH,
43
46
  EXPLICIT_METRIC_NORMALIZATION_COLUMN_KEY,
44
47
  FLOAT_BIT_SHIM_PLACEHOLDER,
48
+ MEASURE_COLLATION_PREFIX_PLACEHOLDER,
49
+ MEASURE_COLLATION_SUFFIX_PLACEHOLDER,
45
50
  METRIC_COLUMN_KEY,
46
51
  METRIC_COLUMN_MODIFIER_PLACEHOLDER,
47
52
  METRIC_QUERY_PLACEHOLDER,
48
53
  METRICS_TO_EXCLUDE,
49
54
  NORMALIZATION_COLUMN_KEY,
55
+ NOT_APPLICABLE_CRITERIA_VALUE,
50
56
  NUMERIC_FORMAT_MASK_PLACEHOLDER,
51
57
  NUMERIC_SCALE_PROPERTY,
52
58
  SCALE_KEY,
59
+ SEMI_STRUCTURED_EXPORT_SIZE_LIMIT_BYTES,
60
+ SEMI_STRUCTURED_SIZE_EXCLUDED_SENTINEL,
61
+ SEMI_STRUCTURED_SIZE_EXCLUDED_SENTINEL_PLACEHOLDER,
62
+ SEMI_STRUCTURED_SIZE_LIMIT_PLACEHOLDER,
53
63
  TEMPLATE_COLUMN_KEY,
54
64
  TYPE_COLUMN_KEY,
55
65
  VECTOR_BIT_SHIM_PLACEHOLDER,
@@ -180,6 +190,20 @@ class QueryGeneratorBase(ABC):
180
190
  if NUMERIC_FORMAT_MASK_PLACEHOLDER in rendered:
181
191
  mask = self._build_numeric_format_mask(self._resolve_numeric_scale(column))
182
192
  rendered = rendered.replace(NUMERIC_FORMAT_MASK_PLACEHOLDER, mask)
193
+ if SEMI_STRUCTURED_SIZE_LIMIT_PLACEHOLDER in rendered:
194
+ # Static constants (no per-column computation, unlike the numeric
195
+ # mask above) -- shared by the Redshift SUPER source and Snowflake
196
+ # VARIANT target size guards so oversized semi-structured values
197
+ # are excluded from comparison symmetrically on both sides
198
+ # (SEMI_STRUCTURED_EXPORT_SIZE_LIMIT_BYTES in utils/constants.py).
199
+ rendered = rendered.replace(
200
+ SEMI_STRUCTURED_SIZE_LIMIT_PLACEHOLDER,
201
+ str(SEMI_STRUCTURED_EXPORT_SIZE_LIMIT_BYTES),
202
+ )
203
+ rendered = rendered.replace(
204
+ SEMI_STRUCTURED_SIZE_EXCLUDED_SENTINEL_PLACEHOLDER,
205
+ SEMI_STRUCTURED_SIZE_EXCLUDED_SENTINEL,
206
+ )
183
207
  rendered = self._expand_vector_bit_placeholder(rendered, column)
184
208
  if FLOAT_BIT_SHIM_PLACEHOLDER not in rendered:
185
209
  return rendered
@@ -339,17 +363,24 @@ class QueryGeneratorBase(ABC):
339
363
  return scale
340
364
 
341
365
  @staticmethod
342
- def _build_fm_to_char_mask(scale: int, *, integer_nines: int = 38) -> str:
366
+ def _build_fm_to_char_mask(scale: int, *, integer_nines: int = SNOWFLAKE_MAX_NUMBER_PRECISION) -> str:
343
367
  """Build a Snowflake/Oracle-style ``FM999…9.00…0`` mask for *scale*.
344
368
 
345
369
  ``FM`` suppresses integer digits written as ``9``, so ``|v| < 1`` renders
346
370
  without a leading zero (``.0001``). Each platform restores the leading
347
371
  zero in its own ``build_<platform>_numeric_canonical_expr`` wrapper to
348
- match Snowflake ``TO_VARCHAR``'s ``0.0001``. Use 38 integer positions so
349
- maximum-precision Oracle/Snowflake NUMBER values do not render as
350
- overflow markers (``###``).
372
+ match Snowflake ``TO_VARCHAR``'s ``0.0001``. Start from 38 integer
373
+ positions so maximum-precision Oracle/Snowflake NUMBER values do not
374
+ render as overflow markers (``###``).
375
+
376
+ Snowflake counts integer and fractional placeholders against a single
377
+ 38-digit model, rejecting anything wider with ``too many digits in
378
+ numeric format``. Shrink the integer run by *scale* to stay inside that
379
+ budget, keeping at least one nine.
351
380
  """
352
381
  scale = max(0, scale)
382
+ budget = SNOWFLAKE_MAX_NUMBER_PRECISION - scale
383
+ integer_nines = max(1, min(integer_nines, budget))
353
384
  int_part = "9" * integer_nines
354
385
  if scale == 0:
355
386
  return f"FM{int_part}"
@@ -399,6 +430,27 @@ class QueryGeneratorBase(ABC):
399
430
  return base if base else text
400
431
  return text
401
432
 
433
+ @classmethod
434
+ def _lookup_normalization_template(
435
+ cls,
436
+ templates: dict[str, str],
437
+ data_type: str,
438
+ ) -> str | None:
439
+ """Return the normalization template for *data_type*, or ``None``.
440
+
441
+ Tries the key verbatim first so platforms keeping parameterized keys
442
+ (``PERIOD(DATE)``) still win, then the ``(p[, s])``-stripped key so
443
+ scale-enriched types such as ``NUMBER(20, 10)`` reach their bare
444
+ ``NUMBER`` template instead of silently falling back to ``DEFAULT``.
445
+ """
446
+ template = templates.get(data_type)
447
+ if template is not None:
448
+ return template
449
+ stripped = cls._normalization_lookup_key(data_type)
450
+ if stripped != data_type:
451
+ template = templates.get(stripped)
452
+ return template
453
+
402
454
  def _metric_normalization_for_numeric(self, column) -> str | None:
403
455
  """Return a ``TO_CHAR``/``FORMAT`` wrapper for numeric min/max metrics."""
404
456
  if not self._is_numeric_normalization_type(column.data_type):
@@ -607,6 +659,17 @@ class QueryGeneratorBase(ABC):
607
659
  table_context,
608
660
  )
609
661
 
662
+ collation_prefix, collation_suffix = self._measure_collation_tokens(
663
+ col,
664
+ metric_name,
665
+ )
666
+ metric_template = metric_template.replace(
667
+ MEASURE_COLLATION_PREFIX_PLACEHOLDER,
668
+ collation_prefix,
669
+ ).replace(
670
+ MEASURE_COLLATION_SUFFIX_PLACEHOLDER,
671
+ collation_suffix,
672
+ )
610
673
  metric_expr = metric_template.replace(COL_NAME_NO_QUOTES_PLACEHOLDER, col.name)
611
674
  metric_expr = self._expand_vector_bit_placeholder(metric_expr, col)
612
675
  if metric_name in ("min", "max") and row.get(EXPLICIT_METRIC_NORMALIZATION_COLUMN_KEY):
@@ -647,6 +710,27 @@ class QueryGeneratorBase(ABC):
647
710
  shape = MetricsResultShape(cells=cells, all_metrics=all_metrics)
648
711
  return GeneratedMetricsQuery(query_string=sql, result_shape=shape)
649
712
 
713
+ def _measure_collation_tokens(self, column, metric_name: str) -> tuple[str, str]:
714
+ """Return dialect tokens for explicit placeholders in character metric templates."""
715
+ return "", ""
716
+
717
+ @staticmethod
718
+ def _has_source_collation_metadata(column) -> bool:
719
+ """Return whether L1 supplied an effective collation for this column."""
720
+ value = getattr(column, "properties", {}).get(COLLATION_NAME_PROPERTY)
721
+ return isinstance(value, str) and bool(value.strip()) and value.strip().upper() != NOT_APPLICABLE_CRITERIA_VALUE
722
+
723
+ @staticmethod
724
+ def _uses_normalized_measure_collation(column) -> bool:
725
+ """Return whether orchestration marked this target measure for normalization."""
726
+ value = getattr(column, "properties", {}).get(APPLY_NORMALIZED_MEASURE_COLLATION_PROPERTY)
727
+ return value is True or (isinstance(value, str) and value.strip().casefold() == "true")
728
+
729
+ @staticmethod
730
+ def _base_data_type(column) -> str:
731
+ """Return an uppercase type name without precision or length."""
732
+ return str(getattr(column, "data_type", "") or "").strip().upper().split("(", 1)[0].strip()
733
+
650
734
  def _resolve_normalization_templates(self, table_context: TableContext) -> dict[str, str]:
651
735
  """Build a ``{column_name: rendered_expression}`` mapping for L2/L3/cell."""
652
736
  datatypes_normalization_templates = table_context.templates_loader_manager.datatypes_normalization_templates
@@ -908,7 +992,10 @@ class QueryGeneratorBase(ABC):
908
992
  datatypes_normalization_renderer_templates: dict[str, str] = {}
909
993
  for column in table_context.columns_to_validate:
910
994
  data_type = self._resolve_datatype_normalization_key(column.data_type)
911
- normalization_template = datatypes_normalization_templates.get(data_type)
995
+ normalization_template = self._lookup_normalization_template(
996
+ datatypes_normalization_templates,
997
+ data_type,
998
+ )
912
999
  if normalization_template is None:
913
1000
  normalization_template = datatypes_normalization_templates.get("DEFAULT")
914
1001
  if normalization_template is None:
@@ -9,6 +9,7 @@
9
9
  {% endfor %}
10
10
  FROM (
11
11
  SELECT{{ qm.render_select_modifier(query_modifiers, 't') }} * {{ qm.render_from_clause(query_modifiers, fully_qualified_name, 't') }}
12
+ {% if extra_from_joins %}{% for j in extra_from_joins %} {{ j }}{% endfor %}{% endif %}
12
13
  {% if has_where_clause %} WHERE {{ where_clause }} {% endif %}
13
14
  {% if order_by_columns %}
14
15
  ORDER BY {% for c in order_by_columns %} "{{ c }}"{% if not loop.last %}, {% endif %}{% endfor %}
@@ -35,6 +35,7 @@ SELECT
35
35
  {% endif %}
36
36
  {% endfor %}
37
37
  FROM {{ fully_qualified_name }}
38
+ {% if extra_from_joins %}{% for j in extra_from_joins %} {{ j }}{% endfor %}{% endif %}
38
39
  {% if has_where_clause %} WHERE {{ where_clause }} {% endif %}
39
40
  ORDER BY {% for index_column in index_column_collection %} "{{ index_column.name }}_IDX" {% if not loop.last %},{% endif %} {% endfor %}
40
41
  LIMIT {{ fetch }}