snowflake-data-validation 1.22.0__tar.gz → 1.23.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 (510) hide show
  1. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/.gitignore +14 -0
  2. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/PKG-INFO +56 -1
  3. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/README.md +52 -0
  4. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/pyproject.toml +4 -1
  5. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_arguments_manager.py +2 -2
  6. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_column_metrics_templates.yaml +8 -0
  7. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_datatypes_normalization_templates.yaml +7 -4
  8. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/query_generator_azure_synapse.py +10 -2
  9. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/configuration/model/configuration_model.py +24 -8
  10. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/configuration/model/connection_types.py +3 -0
  11. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/configuration/model/connections/__init__.py +6 -0
  12. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/configuration/model/table_configuration.py +13 -10
  13. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/executer/executor_factory.py +14 -0
  14. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/executer/sync_validation_executor.py +10 -0
  15. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/extractor/sql_queries_template_generator.py +7 -4
  16. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_column_metrics_templates.yaml +2 -2
  17. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_datatypes_normalization_templates.yaml +3 -2
  18. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/oracle/oracle_iso_normalization.py +117 -0
  19. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/oracle/query/query_generator_oracle.py +99 -14
  20. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/orchestration/table_metadata_processor.py +5 -2
  21. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_table_metadata_query.sql.j2 +8 -4
  22. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_arguments_manager.py +3 -3
  23. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_tz_normalization.py +4 -34
  24. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/query/query_generator_postgresql.py +1 -0
  25. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/__init__.py +8 -0
  26. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/model/query_generator_factory.py +4 -0
  27. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/query_generation/row_validation_queries.py +5 -0
  28. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/query_generation/schema_metrics_queries.py +9 -0
  29. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/validation/schema_validation.py +16 -5
  30. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/query/query_generator_base.py +33 -3
  31. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/query/query_generator_redshift.py +1 -0
  32. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/redshift_arguments_manager.py +3 -3
  33. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_column_metrics_templates.yaml +41 -0
  34. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_datatypes_normalization_templates.yaml +3 -1
  35. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_table_metadata_query.sql.j2 +4 -0
  36. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +334 -0
  37. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/snowflake_arguments_manager.py +3 -3
  38. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/__init__.py +1 -0
  39. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/connector/__init__.py +1 -0
  40. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/connector/connector_factory_sqlite.py +66 -0
  41. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/connector/connector_sqlite.py +166 -0
  42. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/extractor/metadata_extractor_sqlite.py +124 -0
  43. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_cell_validation_data_select.sql.j2 +15 -0
  44. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_column_metrics_templates.yaml +114 -0
  45. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_compute_md5_sql.j2 +38 -0
  46. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_datatypes_normalization_templates.yaml +13 -0
  47. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_extract_md5_rows_chunk.sql.j2 +10 -0
  48. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_get_columns_metadata.sql.j2 +14 -0
  49. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_md5_select.sql.j2 +27 -0
  50. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_table_metadata_query.sql.j2 +24 -0
  51. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_snowflake_datatypes_mapping_template.yaml +10 -0
  52. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_to_sqlite_datatypes_mapping_template.yaml +9 -0
  53. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/model/__init__.py +1 -0
  54. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/model/sqlite_connection.py +46 -0
  55. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/query/__init__.py +11 -0
  56. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/query/query_generator_sqlite.py +103 -0
  57. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/script_writer/__init__.py +11 -0
  58. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/script_writer/script_writer_sqlite.py +85 -0
  59. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 +1 -0
  60. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_table_metadata_query.sql.j2 +8 -4
  61. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/query/query_generator_sqlserver.py +11 -5
  62. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_arguments_manager.py +2 -2
  63. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_column_metrics_templates.yaml +2 -2
  64. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_datatypes_normalization_templates.yaml +1 -1
  65. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/query/query_generator_teradata.py +34 -9
  66. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/teradata_arguments_manager.py +2 -2
  67. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +101 -0
  68. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_base.py +27 -44
  69. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/arguments_manager_factory.py +31 -10
  70. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/column_partitioning_strategy.py +11 -1
  71. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/connector_factory.py +4 -0
  72. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/constants.py +32 -2
  73. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/utils/iso_dv_common.py +255 -0
  74. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/model/table_context.py +1 -0
  75. snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/validation/comparison_codec.py +179 -0
  76. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/metrics_data_validator.py +19 -0
  77. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/Redshift/test_redshift_arguments_manager.py +2 -1
  78. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/azure_synapse/test_azure_synapse_metrics_templates.py +23 -0
  79. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/azure_synapse/test_azure_synapse_query_generator.py +17 -0
  80. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/azure_synapse/test_azure_synapse_row_queries.py +23 -0
  81. snowflake_data_validation-1.23.0/tests/unit/oracle/test_oracle_iso_normalization.py +103 -0
  82. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/oracle/test_oracle_type_mappings.py +2 -1
  83. snowflake_data_validation-1.23.0/tests/unit/sqlite/__init__.py +11 -0
  84. snowflake_data_validation-1.23.0/tests/unit/sqlite/test_connector_factory_sqlite.py +57 -0
  85. snowflake_data_validation-1.23.0/tests/unit/sqlite/test_connector_sqlite.py +147 -0
  86. snowflake_data_validation-1.23.0/tests/unit/sqlite/test_metadata_extractor_sqlite.py +97 -0
  87. snowflake_data_validation-1.23.0/tests/unit/sqlite/test_query_generator_sqlite.py +150 -0
  88. snowflake_data_validation-1.23.0/tests/unit/sqlite/test_script_writer_sqlite.py +78 -0
  89. snowflake_data_validation-1.23.0/tests/unit/sqlserver/__init__.py +0 -0
  90. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/sqlserver/test_sqlserver_row_queries.py +8 -0
  91. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_cell_validation_query_generation.py +3 -3
  92. snowflake_data_validation-1.23.0/tests/unit/test_comparison_codec.py +378 -0
  93. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_data_validator.py +115 -3
  94. snowflake_data_validation-1.23.0/tests/unit/test_iso_dv_common.py +200 -0
  95. snowflake_data_validation-1.23.0/tests/unit/test_platform_bridge.py +30 -0
  96. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_postgresql_tz_normalization.py +0 -26
  97. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_snowflake_arguments_manager.py +1 -0
  98. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_sql_literal_jinja_filter.py +34 -3
  99. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_sqlserver_arguments_manager.py +2 -4
  100. snowflake_data_validation-1.23.0/tests/unit/test_target_platform_factory.py +82 -0
  101. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_teradata_iso_normalization.py +32 -39
  102. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_timestamp_golden_vectors.py +83 -14
  103. snowflake_data_validation-1.22.0/src/snowflake/snowflake_data_validation/snowflake/query/query_generator_snowflake.py +0 -223
  104. snowflake_data_validation-1.22.0/src/snowflake/snowflake_data_validation/teradata/teradata_iso_normalization.py +0 -221
  105. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/LICENSE +0 -0
  106. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/docs/README.md +0 -0
  107. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/__init__.py +0 -0
  108. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/__main__.py +0 -0
  109. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/__init__.py +0 -0
  110. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/azure_synapse_cli.py +0 -0
  111. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/__init__.py +0 -0
  112. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_azure_synapse.py +0 -0
  113. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/connector/connector_factory_azure_synapse.py +0 -0
  114. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/__init__.py +0 -0
  115. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/metadata_extractor_azure_synapse.py +0 -0
  116. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_cell_validation_data_select.sql.j2 +0 -0
  117. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_get_columns_metadata.sql.j2 +0 -0
  118. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_count_query.sql.j2 +0 -0
  119. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_row_md5_select.sql.j2 +0 -0
  120. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_table_metadata_query.sql.j2 +0 -0
  121. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/extractor/templates/azure_synapse_to_snowflake_datatypes_mapping_template.yaml +0 -0
  122. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/__init__.py +0 -0
  123. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/model/azure_synapse_credentials_connection.py +0 -0
  124. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/query/__init__.py +0 -0
  125. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/__init__.py +0 -0
  126. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/azure_synapse/script_writer/script_writer_azure_synapse.py +0 -0
  127. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/common_cli/cli_partitioning.py +0 -0
  128. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/common_cli/cli_sync_validation.py +0 -0
  129. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/comparison_orchestrator.py +0 -0
  130. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/configuration/__init__.py +0 -0
  131. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/configuration/configuration_loader.py +0 -0
  132. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/configuration/model/logging_configuration.py +0 -0
  133. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/configuration/model/validation_configuration.py +0 -0
  134. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/configuration/model/view_configuration.py +0 -0
  135. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/configuration/singleton.py +0 -0
  136. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/connector/__init__.py +0 -0
  137. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/connector/connector_base.py +0 -0
  138. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/connector/connector_factory_base.py +0 -0
  139. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/connector/connector_failure_tracker.py +0 -0
  140. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/executer/__init__.py +0 -0
  141. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/executer/async_generation_executor.py +0 -0
  142. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/executer/async_validation_executor.py +0 -0
  143. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/executer/base_validation_executor.py +0 -0
  144. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/executer/extractor_types.py +0 -0
  145. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/executer/source_validation_executor.py +0 -0
  146. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/extractor/__init__.py +0 -0
  147. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/extractor/metadata_extractor_base.py +0 -0
  148. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/main_cli.py +0 -0
  149. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/oracle/__init__.py +0 -0
  150. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/oracle/extractor/__init__.py +0 -0
  151. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/oracle/extractor/metadata_extractor_oracle.py +0 -0
  152. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_cell_validation_data_select.sql.j2 +0 -0
  153. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_get_columns_metadata.sql.j2 +0 -0
  154. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_count_query.sql.j2 +0 -0
  155. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_row_md5_select.sql.j2 +0 -0
  156. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_table_metadata_query.sql.j2 +0 -0
  157. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/oracle/extractor/templates/oracle_to_snowflake_datatypes_mapping_template.yaml +0 -0
  158. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/oracle/query/__init__.py +0 -0
  159. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/__init__.py +0 -0
  160. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/oracle/script_writer/script_writer_oracle.py +0 -0
  161. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/orchestration/console_progress_reporter.py +0 -0
  162. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/__init__.py +0 -0
  163. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/html_report_builder.py +0 -0
  164. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/orchestration/html_report/report_metadata.py +0 -0
  165. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/orchestration/parallel_execution_engine.py +0 -0
  166. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/orchestration/validation_progress_reporter.py +0 -0
  167. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/orchestration/view_preprocessor.py +0 -0
  168. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/__init__.py +0 -0
  169. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/connector/__init__.py +0 -0
  170. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_factory_postgresql.py +0 -0
  171. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/connector/connector_postgresql.py +0 -0
  172. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/__init__.py +0 -0
  173. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/metadata_extractor_postgresql.py +0 -0
  174. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_cell_validation_data_select.sql.j2 +0 -0
  175. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_column_metrics_templates.yaml +0 -0
  176. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_datatypes_normalization_templates.yaml +0 -0
  177. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_extract_md5_rows_chunk.sql.j2 +0 -0
  178. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_get_columns_metadata.sql.j2 +0 -0
  179. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_count_query.sql.j2 +0 -0
  180. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_row_md5_select.sql.j2 +0 -0
  181. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/extractor/templates/postgresql_to_snowflake_datatypes_mapping_template.yaml +0 -0
  182. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/model/__init__.py +0 -0
  183. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/model/postgresql_credentials_connection.py +0 -0
  184. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/postgresql_cli.py +0 -0
  185. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/query/__init__.py +0 -0
  186. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/__init__.py +0 -0
  187. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/postgresql/script_writer/script_writer_postgresql.py +0 -0
  188. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/DATA_VALIDATION_API_OVERVIEW.md +0 -0
  189. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/_internal.py +0 -0
  190. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/_teradata_internal.py +0 -0
  191. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/async_mode/__init__.py +0 -0
  192. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/async_mode/file_loader.py +0 -0
  193. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/async_mode/script_writer.py +0 -0
  194. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/cli/__init__.py +0 -0
  195. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/cli/commands.py +0 -0
  196. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/configuration/__init__.py +0 -0
  197. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/connectors/__init__.py +0 -0
  198. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/context/__init__.py +0 -0
  199. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/data_validation_api.py +0 -0
  200. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/enums/__init__.py +0 -0
  201. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/execution/__init__.py +0 -0
  202. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/execution/query_executor.py +0 -0
  203. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/generators/__init__.py +0 -0
  204. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/metadata/__init__.py +0 -0
  205. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/model/__init__.py +0 -0
  206. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/model/data_validation_exception.py +0 -0
  207. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/model/generated_query.py +0 -0
  208. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/model/metrics_result_shape.py +0 -0
  209. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/model/query_execution_result.py +0 -0
  210. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/model/result_set.py +0 -0
  211. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/model/validation_result.py +0 -0
  212. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/query_generation/__init__.py +0 -0
  213. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/query_generation/metadata_queries.py +0 -0
  214. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/query_validation/__init__.py +0 -0
  215. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/query_validation/query_comparison.py +0 -0
  216. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/reshape/__init__.py +0 -0
  217. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/reshape/metrics_reshape.py +0 -0
  218. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/__init__.py +0 -0
  219. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/result_set_validation/result_set_comparison.py +0 -0
  220. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/snapshot/__init__.py +0 -0
  221. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_generation.py +0 -0
  222. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/snapshot/snapshot_validation.py +0 -0
  223. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/utils/__init__.py +0 -0
  224. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/utils/helpers.py +0 -0
  225. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/validation/__init__.py +0 -0
  226. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/validation/cell_validation.py +0 -0
  227. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/validation/metrics_validation.py +0 -0
  228. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/public/validation/row_validation.py +0 -0
  229. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/query/__init__.py +0 -0
  230. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/query/chunk_md5_tiered.py +0 -0
  231. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_column_metrics_templates.yaml +0 -0
  232. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/query/extractor/templates/query_datatypes_normalization_templates.yaml +0 -0
  233. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/query/query/query_generator_query.py +0 -0
  234. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/query/query_arguments_manager.py +0 -0
  235. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/__init__.py +0 -0
  236. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/connector/__init__.py +0 -0
  237. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_factory_redshift.py +0 -0
  238. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/connector/connector_redshift.py +0 -0
  239. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/extractor/metadata_extractor_redshift.py +0 -0
  240. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_cell_validation_data_select.sql.j2 +0 -0
  241. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_insert_template.sql.j2 +0 -0
  242. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_concatenated_table_template.sql.j2 +0 -0
  243. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_insert_template.sql.j2 +0 -0
  244. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_chunk_row_md5_table_template.sql.j2 +0 -0
  245. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_column_metrics_templates.yaml +0 -0
  246. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_datatypes_normalization_templates.yaml +0 -0
  247. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_extract_md5_rows_chunk.sql.j2 +0 -0
  248. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_get_columns_metadata.sql.j2 +0 -0
  249. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_count_query.sql.j2 +0 -0
  250. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_row_md5_select.sql.j2 +0 -0
  251. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_table_metadata_query.sql.j2 +0 -0
  252. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/extractor/templates/redshift_to_snowflake_datatypes_mapping_template.yaml +0 -0
  253. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/model/__init__.py +0 -0
  254. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/model/redshift_credentials_connection.py +0 -0
  255. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/query/__init__.py +0 -0
  256. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/redshift_cli.py +0 -0
  257. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/__init__.py +0 -0
  258. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/redshift/script_writer/script_writer_redshift.py +0 -0
  259. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_cell_validation_data_select.sql.j2 +0 -0
  260. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_column_metrics_templates.yaml +0 -0
  261. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/result_set_datatypes_normalization_templates.yaml +0 -0
  262. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/result_set/extractor/templates/snowflake_to_result_set_datatypes_mapping_template.yaml +0 -0
  263. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/result_set/query/query_generator_result_set.py +0 -0
  264. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/result_set/result_set_arguments_manager.py +0 -0
  265. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/script_writer/__init__.py +0 -0
  266. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/script_writer/script_writer_base.py +0 -0
  267. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/__init__.py +0 -0
  268. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_factory_snowflake.py +0 -0
  269. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/connector/connector_snowflake.py +0 -0
  270. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/metadata_extractor_snowflake.py +0 -0
  271. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_cell_validation_data_select.sql.j2 +0 -0
  272. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_concatenated_template.sql.j2 +0 -0
  273. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_chunk_row_md5_template.sql.j2 +0 -0
  274. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_extract_md5_rows_chunk.sql.j2 +0 -0
  275. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_case_sensitive_columns.sql.j2 +0 -0
  276. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_get_columns_metadata.sql.j2 +0 -0
  277. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_count_query.sql.j2 +0 -0
  278. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_row_md5_select.sql.j2 +0 -0
  279. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_temporary_table_from_view_template.sql.j2 +0 -0
  280. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/extractor/templates/snowflake_to_snowflake_datatypes_mapping_template.yaml +0 -0
  281. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/model/__init__.py +0 -0
  282. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_credentials_connection.py +0 -0
  283. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_default_connection.py +0 -0
  284. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/model/snowflake_named_connection.py +0 -0
  285. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/query/__init__.py +0 -0
  286. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/__init__.py +0 -0
  287. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/script_writer/script_writer_snowflake.py +0 -0
  288. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/snowflake/snowflake_cli.py +0 -0
  289. {snowflake_data_validation-1.22.0/tests/unit/azure_synapse → snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/extractor}/__init__.py +0 -0
  290. /snowflake_data_validation-1.22.0/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_count_query.sql.j2 → /snowflake_data_validation-1.23.0/src/snowflake/snowflake_data_validation/sqlite/extractor/templates/sqlite_row_count_query.sql.j2 +0 -0
  291. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/__init__.py +0 -0
  292. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/__init__.py +0 -0
  293. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_factory_sql_server.py +0 -0
  294. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/connector/connector_sql_server.py +0 -0
  295. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/__init__.py +0 -0
  296. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/metadata_extractor_sqlserver.py +0 -0
  297. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_cell_validation_data_select.sql.j2 +0 -0
  298. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_column_metrics_templates.yaml +0 -0
  299. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_compute_md5_sql.j2 +0 -0
  300. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_datatypes_normalization_templates.yaml +0 -0
  301. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_extract_md5_rows_chunk.sql.j2 +0 -0
  302. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_columns_metadata.sql.j2 +0 -0
  303. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_get_temporary_table_internal_identifier_template.sql.j2 +0 -0
  304. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_row_md5_select.sql.j2 +0 -0
  305. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_temporary_table_from_view_template.sql.j2 +0 -0
  306. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/extractor/templates/sqlserver_to_snowflake_datatypes_mapping_template.yaml +0 -0
  307. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/model/__init__.py +0 -0
  308. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/model/sqlserver_credentials_connection.py +0 -0
  309. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/query/__init__.py +0 -0
  310. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/__init__.py +0 -0
  311. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/script_writer/script_writer_sqlserver.py +0 -0
  312. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/sqlserver/sqlserver_cli.py +0 -0
  313. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/table_partitioning_strategy.md +0 -0
  314. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/__init__.py +0 -0
  315. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/connector/__init__.py +0 -0
  316. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_factory_teradata.py +0 -0
  317. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/connector/connector_teradata.py +0 -0
  318. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/extractor/__init__.py +0 -0
  319. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/extractor/metadata_extractor_teradata.py +0 -0
  320. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_cell_validation_data_select.sql.j2 +0 -0
  321. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_compute_md5_sql.j2 +0 -0
  322. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_concatenated.sql.j2 +0 -0
  323. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_create_row_md5.sql.j2 +0 -0
  324. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_extract_md5_rows_chunk.sql.j2 +0 -0
  325. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_get_columns_metadata.sql.j2 +0 -0
  326. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_count_query.sql.j2 +0 -0
  327. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_row_md5_select.sql.j2 +0 -0
  328. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_table_metadata_query.sql.j2 +0 -0
  329. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/extractor/templates/teradata_to_snowflake_datatypes_mapping_template.yaml +0 -0
  330. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/model/__init__.py +0 -0
  331. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/model/teradata_credentials_connection.py +0 -0
  332. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/query/__init__.py +0 -0
  333. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/__init__.py +0 -0
  334. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/script_writer/script_writer_teradata.py +0 -0
  335. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/teradata/teradata_cli.py +0 -0
  336. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/__init__.py +0 -0
  337. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/base_output_handler.py +0 -0
  338. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/column_grouping.py +0 -0
  339. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_editor.py +0 -0
  340. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_generator.py +0 -0
  341. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/configuration_file_synchronizer.py +0 -0
  342. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/connection_pool.py +0 -0
  343. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/console_output_handler.py +0 -0
  344. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/context.py +0 -0
  345. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/cpu_optimizer.py +0 -0
  346. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/helper.py +0 -0
  347. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_database.py +0 -0
  348. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_dataframe.py +0 -0
  349. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_io.py +0 -0
  350. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_misc.py +0 -0
  351. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_polars_cast.py +0 -0
  352. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_query_result.py +0 -0
  353. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/helpers/helper_templates.py +0 -0
  354. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/index_key_format.py +0 -0
  355. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/logging_config.py +0 -0
  356. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/logging_utils.py +0 -0
  357. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/model/chunk.py +0 -0
  358. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/model/column_metadata.py +0 -0
  359. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/model/custom_templates.py +0 -0
  360. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/model/table_column_metadata.py +0 -0
  361. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/model/templates_loader_manager.py +0 -0
  362. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/progress_reporter.py +0 -0
  363. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/row_partitioning_strategy.py +0 -0
  364. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/run_context.py +0 -0
  365. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/shutdown_coordinator.py +0 -0
  366. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/snapshot_validation_statements.py +0 -0
  367. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/telemetry.py +0 -0
  368. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/templates/configuration_file_templates.py +0 -0
  369. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/thread_safe_singleton.py +0 -0
  370. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/utils/validation_utils.py +0 -0
  371. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/__init__.py +0 -0
  372. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/accepted_transformation.py +0 -0
  373. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/cell_data_validator.py +0 -0
  374. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/data_validator_base.py +0 -0
  375. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/dataframe_validator_base.py +0 -0
  376. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/query_validator.py +0 -0
  377. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/result_set_validator.py +0 -0
  378. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/results_summary_report.py +0 -0
  379. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/row_data_validator.py +0 -0
  380. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/row_validation_report_buffer.py +0 -0
  381. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/schema_data_validator.py +0 -0
  382. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/validation_database/__init__.py +0 -0
  383. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/validation_database/sqlite_validation_connection.py +0 -0
  384. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/validation_database/validation_database_connection_base.py +0 -0
  385. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/validation_database_manager.py +0 -0
  386. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/validation_execution_context.py +0 -0
  387. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/validation_report_buffer.py +0 -0
  388. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/src/snowflake/snowflake_data_validation/validation/validation_report_status.py +0 -0
  389. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/.coveragerc +0 -0
  390. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/integration/.coveragerc +0 -0
  391. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/integration/Redshift/test_metadata_extractor_integration.py +0 -0
  392. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/integration/test_async_generation_integration.py +0 -0
  393. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/integration/test_async_validation_integration.py +0 -0
  394. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/integration/test_reference_integration.py +0 -0
  395. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/integration/test_source_validation_integration.py +0 -0
  396. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/integration/test_sync_validation_integration.py +0 -0
  397. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/Redshift/cli/test_redshift_cli_general.py +0 -0
  398. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/Redshift/cli/test_redshift_cli_generate_validation_scripts.py +0 -0
  399. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/Redshift/cli/test_redshift_cli_get_configuration_files.py +0 -0
  400. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/Redshift/cli/test_redshift_cli_run_async_validation.py +0 -0
  401. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/Redshift/cli/test_redshift_cli_run_validation.py +0 -0
  402. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/Redshift/cli/test_redshift_cli_run_validation_ipc.py +0 -0
  403. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/Redshift/model/test_redshift_credentials_connection.py +0 -0
  404. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/Redshift/query/test_query_generator_redshift.py +0 -0
  405. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/Redshift/script_writer/test_script_writer_redshift.py +0 -0
  406. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/Redshift/test_connector_redshift.py +0 -0
  407. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/Teradata/test_connector_teradata.py +0 -0
  408. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/Teradata/test_metadata_extractor_teradata.py +0 -0
  409. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/Teradata/test_query_generator_teradata.py +0 -0
  410. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/Teradata/test_teradata_cli.py +0 -0
  411. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/__init__.py +0 -0
  412. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/assets/custom_templates_loader/snowflake_column_metrics_templates.yaml +0 -0
  413. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/assets/custom_templates_loader/snowflake_datatypes_normalization_templates.yaml +0 -0
  414. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/assets/custom_templates_loader/snowflake_table_metadata_query.sql.j2 +0 -0
  415. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model/conf.yaml +0 -0
  416. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/assets/test_configuration_loader/test_load_configuration_model_reading_file_exception/conf.yaml +0 -0
  417. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/assets/test_helpers/dummy_configuration_file.json +0 -0
  418. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/assets/test_helpers/dummy_connection_source_db.toml +0 -0
  419. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/assets/test_helpers/dummy_datatypes_normalization_template.yaml +0 -0
  420. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/assets/test_helpers/dummy_datatypes_template.yaml +0 -0
  421. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/assets/test_helpers/dummy_metrics_template.yaml +0 -0
  422. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/assets/test_helpers/dummy_metrics_template_datatypes.yaml +0 -0
  423. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/assets/test_helpers/dummy_template.csv +0 -0
  424. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/assets/test_helpers/not_valid_format.yaml +0 -0
  425. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/assets/test_templates_loader_manager/snowflake_column_metrics_templates.yaml +0 -0
  426. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/assets/test_templates_loader_manager/snowflake_datatypes_normalization_templates.yaml +0 -0
  427. {snowflake_data_validation-1.22.0/tests/unit/oracle → snowflake_data_validation-1.23.0/tests/unit/azure_synapse}/__init__.py +0 -0
  428. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/azure_synapse/test_azure_synapse_credentials_connection.py +0 -0
  429. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/azure_synapse/test_azure_synapse_metadata_extractor.py +0 -0
  430. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/azure_synapse/test_connector_azure_synapse.py +0 -0
  431. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/azure_synapse/test_connector_factory_azure_synapse.py +0 -0
  432. {snowflake_data_validation-1.22.0/tests/unit/sqlserver → snowflake_data_validation-1.23.0/tests/unit/oracle}/__init__.py +0 -0
  433. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/oracle/test_oracle_metadata_extractor.py +0 -0
  434. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/oracle/test_oracle_metrics_templates.py +0 -0
  435. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/oracle/test_oracle_normalization_templates.py +0 -0
  436. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/oracle/test_oracle_query_generator.py +0 -0
  437. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/query/test_chunk_md5_tiered.py +0 -0
  438. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_accepted_transformation.py +0 -0
  439. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_arguments_manager_base.py +0 -0
  440. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_arguments_manager_factory.py +0 -0
  441. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_batched_metrics_queries.py +0 -0
  442. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_cell_data_validator.py +0 -0
  443. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_column_grouping.py +0 -0
  444. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_column_metadata.py +0 -0
  445. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_column_partitioning_strategy.py +0 -0
  446. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_comparison_orchestrator.py +0 -0
  447. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_configuration_file_editor.py +0 -0
  448. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_configuration_file_synchronizer.py +0 -0
  449. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_configuration_loader.py +0 -0
  450. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_configuration_model.py +0 -0
  451. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_connection_pool.py +0 -0
  452. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_connector_failure_tracker.py +0 -0
  453. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_connector_snowflake.py +0 -0
  454. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_console_progress_reporter.py +0 -0
  455. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_cpu_optimizer.py +0 -0
  456. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_custom_templates_models.py +0 -0
  457. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_escape_odbc_value.py +0 -0
  458. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_executor_factory.py +0 -0
  459. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_get_configuration_file.py +0 -0
  460. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_helper_dataframe.py +0 -0
  461. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_helper_polars_cast.py +0 -0
  462. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_helpers.py +0 -0
  463. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_html_report_builder.py +0 -0
  464. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_index_key_format.py +0 -0
  465. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_internal_helpers.py +0 -0
  466. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_logging_config.py +0 -0
  467. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_metrics_reshape.py +0 -0
  468. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_metrics_result_shape.py +0 -0
  469. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_metrics_templates_casts.py +0 -0
  470. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_postgresql_normalization_templates.py +0 -0
  471. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_query_cell_level_validation.py +0 -0
  472. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_query_metrics_level_validation.py +0 -0
  473. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_query_to_dataframe.py +0 -0
  474. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_query_validator.py +0 -0
  475. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_report_metadata.py +0 -0
  476. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_result_set_cell_level_validation.py +0 -0
  477. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_result_set_column_metrics_validation.py +0 -0
  478. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_result_set_snapshot_generation.py +0 -0
  479. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_result_set_snapshot_validation.py +0 -0
  480. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_result_set_to_dataframe.py +0 -0
  481. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_result_set_validator.py +0 -0
  482. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_row_data_validator.py +0 -0
  483. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_row_partitioning_strategy.py +0 -0
  484. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_row_validation_report_buffer.py +0 -0
  485. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_shutdown_coordinator.py +0 -0
  486. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_snapshot_validation_statements.py +0 -0
  487. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_snowflake_binary_normalization_templates.py +0 -0
  488. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_snowflake_cli.py +0 -0
  489. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_source_validation_executor.py +0 -0
  490. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_sql_catalog_template_guard.py +0 -0
  491. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_sqlite_validation_connection.py +0 -0
  492. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_sqlserver_cli.py +0 -0
  493. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_sqlserver_multi_version_support.py +0 -0
  494. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_table_column_metadata_model.py +0 -0
  495. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_table_configuration.py +0 -0
  496. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_table_context.py +0 -0
  497. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_table_metadata_processor.py +0 -0
  498. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_table_snapshot_generation.py +0 -0
  499. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_table_snapshot_validation.py +0 -0
  500. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_telemetry.py +0 -0
  501. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_templates_loader_manager.py +0 -0
  502. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_validation_configuration.py +0 -0
  503. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_validation_database_connection.py +0 -0
  504. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_validation_execution_context.py +0 -0
  505. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_validation_progress_reporter.py +0 -0
  506. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_validation_report_buffer.py +0 -0
  507. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_validation_report_status.py +0 -0
  508. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/test_view_configuration.py +0 -0
  509. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/utils/__init__.py +0 -0
  510. {snowflake_data_validation-1.22.0 → snowflake_data_validation-1.23.0}/tests/unit/utils/test_constants.py +0 -0
@@ -93,6 +93,20 @@ docs/_build/
93
93
  # PyBuilder
94
94
  .pybuilder/
95
95
  target/
96
+ # DV target-platform packages (not PyBuilder ``target/`` build output)
97
+ !data-migration-orchestrator/src/data_migration_orchestrator/data_validation_cloud/platforms/target/
98
+ !data-migration-orchestrator/src/data_migration_orchestrator/data_validation_cloud/platforms/target/**
99
+ !data-migration-orchestrator/tests/platforms/target/
100
+ !data-migration-orchestrator/tests/platforms/target/**
101
+ !snowflake-data-validation/src/snowflake/snowflake_data_validation/target/
102
+ !snowflake-data-validation/src/snowflake/snowflake_data_validation/target/**
103
+ # Re-ignore bytecode under the un-ignored target/ trees (negation above overrides __pycache__/)
104
+ data-migration-orchestrator/src/data_migration_orchestrator/data_validation_cloud/platforms/target/**/__pycache__/
105
+ data-migration-orchestrator/tests/platforms/target/**/__pycache__/
106
+ snowflake-data-validation/src/snowflake/snowflake_data_validation/target/**/__pycache__/
107
+ data-migration-orchestrator/src/data_migration_orchestrator/data_validation_cloud/platforms/target/**/*.pyc
108
+ data-migration-orchestrator/tests/platforms/target/**/*.pyc
109
+ snowflake-data-validation/src/snowflake/snowflake_data_validation/target/**/*.pyc
96
110
 
97
111
  # Jupyter Notebook
98
112
  .ipynb_checkpoints
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-data-validation
3
- Version: 1.22.0
3
+ Version: 1.23.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/
@@ -56,6 +56,7 @@ Requires-Dist: pytest-mock>=3.14.1; extra == 'all'
56
56
  Requires-Dist: pytest>=8.3.3; extra == 'all'
57
57
  Requires-Dist: redshift-connector>=2.1.8; extra == 'all'
58
58
  Requires-Dist: setuptools>=70.0.0; extra == 'all'
59
+ Requires-Dist: sqlean-py>=3.45.0; extra == 'all'
59
60
  Requires-Dist: teradatasql>=17.20.0.0; extra == 'all'
60
61
  Requires-Dist: twine==6.0.1; extra == 'all'
61
62
  Provides-Extra: azure-synapse
@@ -74,6 +75,8 @@ Provides-Extra: postgresql
74
75
  Requires-Dist: psycopg[binary]>=3.2.0; extra == 'postgresql'
75
76
  Provides-Extra: redshift
76
77
  Requires-Dist: redshift-connector>=2.1.8; extra == 'redshift'
78
+ Provides-Extra: sqlite
79
+ Requires-Dist: sqlean-py>=3.45.0; extra == 'sqlite'
77
80
  Provides-Extra: sqlserver
78
81
  Requires-Dist: azure-identity>=1.15.0; extra == 'sqlserver'
79
82
  Requires-Dist: pyodbc>=5.2.0; extra == 'sqlserver'
@@ -118,6 +121,14 @@ For SQL Server support:
118
121
  pip install "snowflake-data-validation[sqlserver]"
119
122
  ```
120
123
 
124
+ For SQLite support:
125
+
126
+ ```bash
127
+ pip install "snowflake-data-validation[sqlite]"
128
+ ```
129
+
130
+ > **SQLite prerequisite:** This extra installs [sqlean.py](https://github.com/nalgeon/sqlean), a drop-in `sqlite3` replacement that bundles the [sqlean-crypto](https://github.com/nalgeon/sqlean/blob/main/docs/crypto.md) extension. The `crypto_md5` function provided by this extension is required for row-level MD5 computation during SQLite data validation. Wheels are available for **Linux and macOS** only; Windows is not supported by `sqlean.py`.
131
+
121
132
  For development and testing:
122
133
 
123
134
  ```bash
@@ -205,6 +216,50 @@ For complete command reference, configuration options, and examples, see the [Da
205
216
 
206
217
  ## Changelog
207
218
 
219
+ ### v1.23.0
220
+
221
+ **New features**
222
+
223
+ - Added configurable text comparison mode (`logical` vs `raw`) for column-level validation.
224
+ - Added SQLite as a supported source platform for data validation.
225
+
226
+ **Improvements**
227
+
228
+ - Implemented Oracle ISO 8601 timestamp normalization for Snowflake migration.
229
+ - Enhanced timestamp normalization for Teradata with fractional-second precision.
230
+ - Implemented timestamp timezone preservation for Azure Synapse validation.
231
+ - Decoupled target platform for data validation, enabling non-Snowflake target comparisons.
232
+
233
+ **Bug fixes**
234
+
235
+ - Fixed row-hash early-stop so all failed rows are reported when early stopping is disabled.
236
+ - Fixed empty-source handling to record an explicit validation failure instead of silently passing.
237
+
238
+ ### v1.22.1
239
+
240
+ No user-facing changes in this release.
241
+
242
+ ### v1.22.0
243
+
244
+ **New features**
245
+
246
+ - Added accepted transformations (V1) for data validation.
247
+
248
+ **Improvements**
249
+
250
+ - Preserved ISO 8601 timestamp timezone for SQL Server validation.
251
+ - Preserved ISO 8601 timestamp timezone for Teradata validation.
252
+ - Replaced the pipe with the `AND` keyword in `WHERE` clause generation.
253
+ - Aligned Postgres `BYTEA` normalization with Snowflake `BINARY` `0x` prefix.
254
+ - Aligned Oracle `RAW`/`BLOB` normalization with Snowflake `BINARY` `0x` prefix.
255
+
256
+ **Bug fixes**
257
+
258
+ - Implemented a NULL hashing sentinel for SQL templates.
259
+ - Fixed SQL Server datetime normalization for L2/L3 validation.
260
+ - Fixed Oracle `DATE`/`TIMESTAMP` normalization to match Snowflake ISO FF9.
261
+ - Replaced `TRIM` with `RTRIM` in L2/L3 validation query templates.
262
+
208
263
  ### v1.21.0
209
264
 
210
265
  **Improvements**
@@ -35,6 +35,14 @@ For SQL Server support:
35
35
  pip install "snowflake-data-validation[sqlserver]"
36
36
  ```
37
37
 
38
+ For SQLite support:
39
+
40
+ ```bash
41
+ pip install "snowflake-data-validation[sqlite]"
42
+ ```
43
+
44
+ > **SQLite prerequisite:** This extra installs [sqlean.py](https://github.com/nalgeon/sqlean), a drop-in `sqlite3` replacement that bundles the [sqlean-crypto](https://github.com/nalgeon/sqlean/blob/main/docs/crypto.md) extension. The `crypto_md5` function provided by this extension is required for row-level MD5 computation during SQLite data validation. Wheels are available for **Linux and macOS** only; Windows is not supported by `sqlean.py`.
45
+
38
46
  For development and testing:
39
47
 
40
48
  ```bash
@@ -122,6 +130,50 @@ For complete command reference, configuration options, and examples, see the [Da
122
130
 
123
131
  ## Changelog
124
132
 
133
+ ### v1.23.0
134
+
135
+ **New features**
136
+
137
+ - Added configurable text comparison mode (`logical` vs `raw`) for column-level validation.
138
+ - Added SQLite as a supported source platform for data validation.
139
+
140
+ **Improvements**
141
+
142
+ - Implemented Oracle ISO 8601 timestamp normalization for Snowflake migration.
143
+ - Enhanced timestamp normalization for Teradata with fractional-second precision.
144
+ - Implemented timestamp timezone preservation for Azure Synapse validation.
145
+ - Decoupled target platform for data validation, enabling non-Snowflake target comparisons.
146
+
147
+ **Bug fixes**
148
+
149
+ - Fixed row-hash early-stop so all failed rows are reported when early stopping is disabled.
150
+ - Fixed empty-source handling to record an explicit validation failure instead of silently passing.
151
+
152
+ ### v1.22.1
153
+
154
+ No user-facing changes in this release.
155
+
156
+ ### v1.22.0
157
+
158
+ **New features**
159
+
160
+ - Added accepted transformations (V1) for data validation.
161
+
162
+ **Improvements**
163
+
164
+ - Preserved ISO 8601 timestamp timezone for SQL Server validation.
165
+ - Preserved ISO 8601 timestamp timezone for Teradata validation.
166
+ - Replaced the pipe with the `AND` keyword in `WHERE` clause generation.
167
+ - Aligned Postgres `BYTEA` normalization with Snowflake `BINARY` `0x` prefix.
168
+ - Aligned Oracle `RAW`/`BLOB` normalization with Snowflake `BINARY` `0x` prefix.
169
+
170
+ **Bug fixes**
171
+
172
+ - Implemented a NULL hashing sentinel for SQL templates.
173
+ - Fixed SQL Server datetime normalization for L2/L3 validation.
174
+ - Fixed Oracle `DATE`/`TIMESTAMP` normalization to match Snowflake ISO FF9.
175
+ - Replaced `TRIM` with `RTRIM` in L2/L3 validation query templates.
176
+
125
177
  ### v1.21.0
126
178
 
127
179
  **Improvements**
@@ -65,7 +65,7 @@ sdv = "snowflake.snowflake_data_validation.main_cli:data_validation_app"
65
65
  snowflake-data-validation = "snowflake.snowflake_data_validation.main_cli:data_validation_app"
66
66
 
67
67
  [project.optional-dependencies]
68
- all = ["snowflake-data-validation[development,sqlserver,teradata,redshift,postgresql,azure-synapse]"]
68
+ all = ["snowflake-data-validation[development,sqlserver,teradata,redshift,postgresql,azure-synapse,sqlite]"]
69
69
  development = [
70
70
  "pytest>=8.3.3",
71
71
  "pytest-cov>=6.0.0",
@@ -84,6 +84,9 @@ sqlserver = [
84
84
  teradata = [
85
85
  "teradatasql>=17.20.0.0",
86
86
  ]
87
+ sqlite = [
88
+ "sqlean.py>=3.45.0",
89
+ ]
87
90
  redshift = [
88
91
  "redshift-connector>=2.1.8",
89
92
  ]
@@ -38,9 +38,9 @@ from snowflake.snowflake_data_validation.utils.constants import (
38
38
  class AzureSynapseArgumentsManager(ArgumentsManagerBase):
39
39
  """Arguments manager for Azure Synapse Analytics connections and configuration."""
40
40
 
41
- def __init__(self) -> None:
41
+ def __init__(self, target_platform: Platform = Platform.SNOWFLAKE) -> None:
42
42
  """Initialize the Azure Synapse arguments manager."""
43
- super().__init__(Platform.AZURE_SYNAPSE, Platform.SNOWFLAKE)
43
+ super().__init__(Platform.AZURE_SYNAPSE, target_platform)
44
44
 
45
45
  @property
46
46
  def is_snowflake_to_snowflake(self) -> bool:
@@ -424,9 +424,11 @@ DATETIME:
424
424
  min:
425
425
  metric_query: MIN("{{ col_name }}")
426
426
  metric_return_datatype: DATETIME
427
+ metric_normalization: FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00'
427
428
  max:
428
429
  metric_query: MAX("{{ col_name }}")
429
430
  metric_return_datatype: DATETIME
431
+ metric_normalization: FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00'
430
432
  count_null:
431
433
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
432
434
  metric_return_datatype: INT
@@ -435,9 +437,11 @@ DATETIME2:
435
437
  min:
436
438
  metric_query: MIN("{{ col_name }}")
437
439
  metric_return_datatype: DATETIME2
440
+ metric_normalization: FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00'
438
441
  max:
439
442
  metric_query: MAX("{{ col_name }}")
440
443
  metric_return_datatype: DATETIME2
444
+ metric_normalization: FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00'
441
445
  count_null:
442
446
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
443
447
  metric_return_datatype: INT
@@ -446,9 +450,11 @@ SMALLDATETIME:
446
450
  min:
447
451
  metric_query: MIN("{{ col_name }}")
448
452
  metric_return_datatype: SMALLDATETIME
453
+ metric_normalization: FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.000000000')
449
454
  max:
450
455
  metric_query: MAX("{{ col_name }}")
451
456
  metric_return_datatype: SMALLDATETIME
457
+ metric_normalization: FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.000000000')
452
458
  count_null:
453
459
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
454
460
  metric_return_datatype: INT
@@ -457,9 +463,11 @@ DATETIMEOFFSET:
457
463
  min:
458
464
  metric_query: MIN("{{ col_name }}")
459
465
  metric_return_datatype: DATETIMEOFFSET
466
+ metric_normalization: FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00' + FORMAT({{ metric_query }}, 'zzz')
460
467
  max:
461
468
  metric_query: MAX("{{ col_name }}")
462
469
  metric_return_datatype: DATETIMEOFFSET
470
+ metric_normalization: FORMAT({{ metric_query }}, 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00' + FORMAT({{ metric_query }}, 'zzz')
463
471
  count_null:
464
472
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
465
473
  metric_return_datatype: INT
@@ -32,12 +32,15 @@ NCHAR: TRIM("{{ col_name }}")
32
32
  NVARCHAR: TRIM("{{ col_name }}")
33
33
 
34
34
  # ---- Date / Time types ----
35
+ # Append '00' to FORMAT('.fffffff') so the output reaches FF9 (Snowflake TIMESTAMP_NTZ format).
36
+ # Use '+' (not CONCAT) so a NULL input propagates to NULL — CONCAT would coerce NULL to ''.
37
+ # FORMAT(..., 'zzz') reliably emits '+HH:MM'/'-HH:MM' for every offset, including UTC.
35
38
  DATE: FORMAT("{{ col_name }}", 'yyyy-MM-dd')
36
39
  TIME: CONVERT(VARCHAR(8), "{{ col_name }}", 108)
37
- DATETIME: FORMAT("{{ col_name }}", 'yyyy-MM-dd-HH:mm:ss')
38
- DATETIME2: FORMAT("{{ col_name }}", 'yyyy-MM-dd-HH:mm:ss')
39
- SMALLDATETIME: FORMAT("{{ col_name }}", 'yyyy-MM-dd-HH:mm:ss')
40
- DATETIMEOFFSET: FORMAT("{{ col_name }}" AT TIME ZONE 'UTC', 'yyyy-MM-dd-HH:mm:ss')
40
+ DATETIME: FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00'
41
+ DATETIME2: FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00'
42
+ SMALLDATETIME: FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.000000000')
43
+ DATETIMEOFFSET: FORMAT("{{ col_name }}", 'yyyy-MM-dd''T''HH:mm:ss.fffffff') + '00' + FORMAT("{{ col_name }}", 'zzz')
41
44
 
42
45
  # ---- Binary types ----
43
46
  BINARY: CONVERT(VARCHAR(MAX), "{{ col_name }}", 2)
@@ -83,15 +83,22 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
83
83
  table_context: TableContext,
84
84
  *,
85
85
  order_by: bool = False,
86
+ column_codec_map=None, # accepted for interface compatibility; not applied on this platform
86
87
  ) -> str:
87
88
  """Generate an inline SELECT returning ``(index_cols, ROW_MD5)``.
88
89
 
89
90
  Uses ``HASHBYTES('MD5', ...)`` and ``CONVERT(VARCHAR(32), ..., 2)``
90
91
  syntax via the ``azure_synapse_row_md5_select.sql.j2`` template.
91
92
  """
92
- return self._build_row_md5_select(table_context, order_by=order_by)
93
+ return self._build_row_md5_select(table_context, order_by=order_by, column_codec_map=column_codec_map)
93
94
 
94
- def _build_row_md5_select(self, table_context: TableContext, *, order_by: bool = False) -> str:
95
+ def _build_row_md5_select(
96
+ self,
97
+ table_context: TableContext,
98
+ *,
99
+ order_by: bool = False,
100
+ column_codec_map=None, # accepted for interface compatibility; not applied on this platform
101
+ ) -> str:
95
102
  """Synapse-specific row MD5 SELECT (case-insensitive type template lookup).
96
103
 
97
104
  L1 ``columns_metadata`` stores source types in lowercase (e.g. int,
@@ -121,6 +128,7 @@ class QueryGeneratorAzureSynapse(QueryGeneratorBase):
121
128
  self,
122
129
  table_context: TableContext,
123
130
  order_by_columns: list[str] | None = None,
131
+ column_codec_map=None, # accepted for interface compatibility; not applied on this platform
124
132
  ) -> str:
125
133
  """SELECT with per-column normalization matching L3 MD5 templates.
126
134
 
@@ -82,24 +82,33 @@ class ConfigurationModel(BaseModel):
82
82
  return self
83
83
 
84
84
  def check_tables(self) -> None:
85
+ if not self.tables:
86
+ return
87
+ target_platform = Platform(self.target_platform.lower())
85
88
  table: TableConfiguration
86
89
  for table in self.tables:
87
90
  if self.target_database and table.target_database is None:
88
91
  self._add_database(object=table)
89
- self._apply_mappings_to_table(table)
92
+ self._apply_mappings_to_table(table, target_platform=target_platform)
90
93
  self._normalize_fully_qualified_name_based_on_source(table)
94
+ table._load_target_fully_qualified_name(target_platform=target_platform)
95
+ table._set_internal_identifiers()
91
96
  self._check_max_failed_rows_number(table)
92
97
  self._check_chunk_number(table)
93
98
  self.set_exclude_metrics(table)
94
99
  self.set_apply_metric_column_modifier(table)
95
100
 
96
101
  def check_views(self) -> None:
102
+ if not self.views:
103
+ return
104
+ target_platform = Platform(self.target_platform.lower())
97
105
  view: ViewConfiguration
98
106
  for view in self.views:
99
107
  if self.target_database and view.target_database is None:
100
108
  self._add_database(object=view)
101
- self._apply_mappings_to_view(view)
109
+ self._apply_mappings_to_view(view, target_platform=target_platform)
102
110
  self._normalize_fully_qualified_name_based_on_source(view)
111
+ view._load_target_fully_qualified_name(target_platform=target_platform)
103
112
  self._check_max_failed_rows_number(view)
104
113
  self._check_chunk_number(view)
105
114
  self.set_exclude_metrics(view)
@@ -121,7 +130,9 @@ class ConfigurationModel(BaseModel):
121
130
  "Schema mappings cannot have empty string as a target schema."
122
131
  )
123
132
 
124
- def _apply_mappings_to_table(self, table: TableConfiguration) -> None:
133
+ def _apply_mappings_to_table(
134
+ self, table: TableConfiguration, *, target_platform: Platform
135
+ ) -> None:
125
136
  needs_reload = False
126
137
 
127
138
  mapped_database = self.database_mappings.get(table.source_database)
@@ -135,7 +146,7 @@ class ConfigurationModel(BaseModel):
135
146
  needs_reload = True
136
147
 
137
148
  if needs_reload:
138
- table._load_target_fully_qualified_name()
149
+ table._load_target_fully_qualified_name(target_platform=target_platform)
139
150
  table._set_internal_identifiers()
140
151
 
141
152
  def _normalize_fully_qualified_name_based_on_source(
@@ -147,7 +158,9 @@ class ConfigurationModel(BaseModel):
147
158
  if is_source_oracle:
148
159
  table.fully_qualified_name = f"{table.source_schema}.{table.source_table}"
149
160
 
150
- def _apply_mappings_to_view(self, view: ViewConfiguration) -> None:
161
+ def _apply_mappings_to_view(
162
+ self, view: ViewConfiguration, *, target_platform: Platform
163
+ ) -> None:
151
164
  needs_reload = False
152
165
 
153
166
  mapped_database = self.database_mappings.get(view.source_database)
@@ -161,11 +174,12 @@ class ConfigurationModel(BaseModel):
161
174
  needs_reload = True
162
175
 
163
176
  if needs_reload:
164
- view._load_target_fully_qualified_name()
177
+ view._load_target_fully_qualified_name(target_platform=target_platform)
165
178
 
166
179
  # Set internal identifiers for SQL Server platform to handle special identifier formatting.
167
180
  view._set_internal_identifiers(
168
- source_platform=Platform(self.source_platform.lower())
181
+ source_platform=Platform(self.source_platform.lower()),
182
+ target_platform=target_platform,
169
183
  )
170
184
 
171
185
  def _check_max_failed_rows_number(self, table: TableConfiguration) -> None:
@@ -190,4 +204,6 @@ class ConfigurationModel(BaseModel):
190
204
 
191
205
  def _add_database(self, object: TableConfiguration) -> None:
192
206
  object.target_database = self.target_database
193
- object._load_target_fully_qualified_name()
207
+ object._load_target_fully_qualified_name(
208
+ target_platform=Platform(self.target_platform.lower())
209
+ )
@@ -27,6 +27,7 @@ from snowflake.snowflake_data_validation.configuration.model.connections import
27
27
  SnowflakeCredentialsConnection,
28
28
  SnowflakeDefaultConnection,
29
29
  SnowflakeNamedConnection,
30
+ SqliteConnection,
30
31
  SqlServerCredentialsConnection,
31
32
  TeradataCredentialsConnection,
32
33
  )
@@ -49,4 +50,6 @@ Connection = Union[
49
50
  RedshiftCredentialsConnection,
50
51
  # Azure Synapse connections
51
52
  AzureSynapseCredentialsConnection,
53
+ # SQLite connections
54
+ SqliteConnection,
52
55
  ]
@@ -45,6 +45,11 @@ from snowflake.snowflake_data_validation.snowflake.model.snowflake_credentials_c
45
45
  SnowflakeCredentialsConnection,
46
46
  )
47
47
 
48
+ # Import SQLite connection models
49
+ from snowflake.snowflake_data_validation.sqlite.model.sqlite_connection import (
50
+ SqliteConnection,
51
+ )
52
+
48
53
  __all__ = [
49
54
  "AzureSynapseCredentialsConnection",
50
55
  "SqlServerCredentialsConnection",
@@ -54,4 +59,5 @@ __all__ = [
54
59
  "SnowflakeCredentialsConnection",
55
60
  "PostgresqlCredentialsConnection",
56
61
  "RedshiftCredentialsConnection",
62
+ "SqliteConnection",
57
63
  ]
@@ -9,7 +9,10 @@ from typing_extensions import Self
9
9
  from snowflake.snowflake_data_validation.configuration.model.validation_configuration import (
10
10
  ValidationConfiguration,
11
11
  )
12
- from snowflake.snowflake_data_validation.utils.constants import NEWLINE, ObjectType
12
+ from snowflake.snowflake_data_validation.target.target_platform_factory import (
13
+ TargetPlatformFactory,
14
+ )
15
+ from snowflake.snowflake_data_validation.utils.constants import NEWLINE, ObjectType, Platform
13
16
  from snowflake.snowflake_data_validation.utils.helper import Helper
14
17
  from snowflake.snowflake_data_validation.utils.helpers.helper_database import (
15
18
  HelperDatabase,
@@ -123,16 +126,16 @@ class TableConfiguration(BaseModel):
123
126
  self.source_schema = decomposed_tuple[1]
124
127
  self.source_table = decomposed_tuple[2]
125
128
 
126
- def _load_target_fully_qualified_name(self) -> None:
127
- self.target_database = HelperDatabase.normalize_to_snowflake_identifier(
128
- self.target_database or self.source_database
129
- )
130
- self.target_schema = HelperDatabase.normalize_to_snowflake_identifier(
131
- self.target_schema or self.source_schema
132
- )
133
- self.target_name = HelperDatabase.normalize_to_snowflake_identifier(
134
- self.target_name or self.source_table
129
+ def _load_target_fully_qualified_name(
130
+ self, target_platform: Platform | None = None
131
+ ) -> None:
132
+ target_capability = TargetPlatformFactory.create(
133
+ target_platform or Platform.SNOWFLAKE
135
134
  )
135
+ normalize = target_capability.normalize_target_identifier
136
+ self.target_database = normalize(self.target_database or self.source_database)
137
+ self.target_schema = normalize(self.target_schema or self.source_schema)
138
+ self.target_name = normalize(self.target_name or self.source_table)
136
139
  self.target_fully_qualified_name = (
137
140
  f"{self.target_database}.{self.target_schema}.{self.target_name}"
138
141
  )
@@ -92,6 +92,15 @@ from snowflake.snowflake_data_validation.snowflake.query.query_generator_snowfla
92
92
  from snowflake.snowflake_data_validation.snowflake.script_writer.script_writer_snowflake import (
93
93
  ScriptWriterSnowflake,
94
94
  )
95
+ from snowflake.snowflake_data_validation.sqlite.extractor.metadata_extractor_sqlite import (
96
+ MetadataExtractorSqlite,
97
+ )
98
+ from snowflake.snowflake_data_validation.sqlite.query.query_generator_sqlite import (
99
+ QueryGeneratorSqlite,
100
+ )
101
+ from snowflake.snowflake_data_validation.sqlite.script_writer.script_writer_sqlite import (
102
+ ScriptWriterSqlite,
103
+ )
95
104
  from snowflake.snowflake_data_validation.sqlserver.connector.connector_sql_server import (
96
105
  ConnectorSqlServer,
97
106
  )
@@ -194,6 +203,11 @@ class ExecutorFactory:
194
203
  metadata_extractor=MetadataExtractorPostgresql,
195
204
  script_writer=ScriptWriterPostgresql,
196
205
  ),
206
+ Platform.SQLITE: PlatformConfig(
207
+ query_generator=QueryGeneratorSqlite,
208
+ metadata_extractor=MetadataExtractorSqlite,
209
+ script_writer=ScriptWriterSqlite,
210
+ ),
197
211
  Platform.AZURE_SYNAPSE: PlatformConfig(
198
212
  query_generator=QueryGeneratorAzureSynapse,
199
213
  metadata_extractor=MetadataExtractorAzureSynapse,
@@ -26,6 +26,7 @@ public workflow API module:
26
26
  3. Validation - Uses data_validation_api.validate_schema / validate_metrics
27
27
  """
28
28
 
29
+ import hashlib
29
30
  import logging
30
31
 
31
32
  from concurrent.futures import ThreadPoolExecutor
@@ -374,6 +375,15 @@ class SyncValidationExecutor(BaseValidationExecutor):
374
375
  columns=lambda x: x.upper() + TARGET_SUFFIX
375
376
  )
376
377
 
378
+ # SQLite has no native MD5: the row-md5-select query returns CONCAT_TEXT
379
+ # instead of ROW_MD5. Compute hashlib MD5 here so the comparison columns match.
380
+ _concat_col = "CONCAT_TEXT" + SOURCE_SUFFIX
381
+ if _concat_col in source_md5_df.columns:
382
+ source_md5_df["ROW_MD5" + SOURCE_SUFFIX] = source_md5_df[_concat_col].apply(
383
+ lambda v: hashlib.md5((v if v is not None else "").encode("utf-8")).hexdigest().upper()
384
+ )
385
+ source_md5_df = source_md5_df.drop(columns=[_concat_col])
386
+
377
387
  source_transformed = QueryExecutionResult(dataframe=source_md5_df)
378
388
  target_transformed = QueryExecutionResult(dataframe=target_md5_df)
379
389
 
@@ -71,8 +71,9 @@ class SQLQueriesTemplateGenerator:
71
71
  fully_qualified_name: str,
72
72
  where_clause: str,
73
73
  has_where_clause: bool,
74
- column_selection_list: list[ColumnMetadata],
74
+ columns: list[str],
75
75
  is_temporary_table: bool,
76
+ use_as_exclude_list: bool = False,
76
77
  ):
77
78
  """
78
79
  Generate SQL query for table metadata based on the provided table configuration and platform.
@@ -85,8 +86,10 @@ class SQLQueriesTemplateGenerator:
85
86
  fully_qualified_name (str): The fully qualified name of the table.
86
87
  where_clause (str): Optional WHERE clause to filter results.
87
88
  has_where_clause (bool): Indicates if a WHERE clause is present.
88
- column_selection_list (list[ColumnMetadata]): List of ColumnMetadata objects to include in the query.
89
+ columns (list[str]): Column names to include (``use_as_exclude_list=False``)
90
+ or exclude (``use_as_exclude_list=True``) from the catalog query.
89
91
  is_temporary_table (bool): Indicates if the table is temporary.
92
+ use_as_exclude_list (bool): When True, ``columns`` is treated as a NOT IN list.
90
93
 
91
94
  Returns:
92
95
  str: The generated SQL query as a string.
@@ -99,7 +102,6 @@ class SQLQueriesTemplateGenerator:
99
102
  template_file = TABLE_METADATA_QUERY.format(platform=platform)
100
103
  try:
101
104
  template = self.env.get_template(template_file)
102
- column_names = [col.name for col in column_selection_list]
103
105
  sql = template.render(
104
106
  object_name=table_name,
105
107
  object_schema=schema_name,
@@ -107,7 +109,8 @@ class SQLQueriesTemplateGenerator:
107
109
  fully_qualified_name=fully_qualified_name,
108
110
  where_clause=where_clause,
109
111
  has_where_clause=has_where_clause,
110
- columns=column_names,
112
+ columns=columns,
113
+ use_as_exclude_list=use_as_exclude_list,
111
114
  is_temporary_table=is_temporary_table,
112
115
  )
113
116
  return sql
@@ -487,11 +487,11 @@ TIMESTAMP WITH LOCAL TIME ZONE:
487
487
  min:
488
488
  metric_query: MIN("{{ col_name }}")
489
489
  metric_return_datatype: TIMESTAMP WITH LOCAL TIME ZONE
490
- metric_normalization: TO_CHAR(SYS_EXTRACT_UTC(CAST({{ metric_query }} AS TIMESTAMP WITH TIME ZONE)), 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
490
+ metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
491
491
  max:
492
492
  metric_query: MAX("{{ col_name }}")
493
493
  metric_return_datatype: TIMESTAMP WITH LOCAL TIME ZONE
494
- metric_normalization: TO_CHAR(SYS_EXTRACT_UTC(CAST({{ metric_query }} AS TIMESTAMP WITH TIME ZONE)), 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
494
+ metric_normalization: TO_CHAR({{ metric_query }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
495
495
  count_null:
496
496
  metric_query: SUM(CASE WHEN "{{ col_name }}" IS NULL THEN 1 ELSE 0 END)
497
497
  metric_return_datatype: INTEGER
@@ -65,11 +65,12 @@ SDO_GEOMETRY: NVL(SDO_UTIL.TO_WKTGEOMETRY({{ col_name }}), '')
65
65
  # ---- Date / Time types ----
66
66
  # Format masks aligned with Snowflake TIMESTAMP_NTZ / TIMESTAMP_TZ normalization:
67
67
  # DATE / TIMESTAMP → ISO 8601 with 9-digit fractional seconds (FF9)
68
- # *TIME ZONE UTC extract, ISO with offset (REGEXP_REPLACE Z → +00:00)
68
+ # TIMESTAMP WITH TIME ZONE → ISO with per-row offset (TZH:TZM)
69
+ # TIMESTAMP WITH LOCAL TIME ZONE → session wall-clock ISO (no UTC extract)
69
70
  DATE: TO_CHAR(CAST({{ col_name }} AS TIMESTAMP), 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
70
71
  TIMESTAMP: TO_CHAR({{ col_name }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
71
72
  TIMESTAMP WITH TIME ZONE: REGEXP_REPLACE(TO_CHAR({{ col_name }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9TZH:TZM'), 'Z$', '+00:00')
72
- TIMESTAMP WITH LOCAL TIME ZONE: TO_CHAR(SYS_EXTRACT_UTC(CAST({{ col_name }} AS TIMESTAMP WITH TIME ZONE)), 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
73
+ TIMESTAMP WITH LOCAL TIME ZONE: TO_CHAR({{ col_name }}, 'YYYY-MM-DD"T"HH24:MI:SS.FF9')
73
74
 
74
75
  # ---- Interval types ----
75
76
  # TO_CHAR on INTERVAL prefixes a sign and zero-pads fields (e.g. "+01-06").