dbt-adapters 1.4.1__tar.gz → 1.6.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.

Potentially problematic release.


This version of dbt-adapters might be problematic. Click here for more details.

Files changed (165) hide show
  1. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/PKG-INFO +2 -2
  2. dbt_adapters-1.6.0/dbt/adapters/__about__.py +1 -0
  3. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/base/impl.py +27 -3
  4. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/base/meta.py +19 -0
  5. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/base/relation.py +51 -3
  6. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/factory.py +2 -2
  7. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/adapters/timestamps.sql +8 -0
  8. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/models/incremental/strategies.sql +13 -0
  9. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/snapshots/helpers.sql +25 -0
  10. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/snapshots/snapshot.sql +5 -0
  11. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/pyproject.toml +1 -1
  12. dbt_adapters-1.4.1/dbt/adapters/__about__.py +0 -1
  13. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/.gitignore +0 -0
  14. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/LICENSE +0 -0
  15. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/README.md +0 -0
  16. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/__init__.py +0 -0
  17. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/__init__.py +0 -0
  18. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/base/README.md +0 -0
  19. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/base/__init__.py +0 -0
  20. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/base/column.py +0 -0
  21. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/base/connections.py +0 -0
  22. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/base/plugin.py +0 -0
  23. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/base/query_headers.py +0 -0
  24. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/cache.py +0 -0
  25. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/capability.py +0 -0
  26. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/clients/__init__.py +0 -0
  27. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/clients/jinja.py +0 -0
  28. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/contracts/__init__.py +0 -0
  29. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/contracts/connection.py +0 -0
  30. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/contracts/macros.py +0 -0
  31. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/contracts/relation.py +0 -0
  32. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/events/README.md +0 -0
  33. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/events/__init__.py +0 -0
  34. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/events/adapter_types.proto +0 -0
  35. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/events/adapter_types_pb2.py +0 -0
  36. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/events/base_types.py +0 -0
  37. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/events/logging.py +0 -0
  38. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/events/types.py +0 -0
  39. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/exceptions/__init__.py +0 -0
  40. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/exceptions/alias.py +0 -0
  41. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/exceptions/cache.py +0 -0
  42. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/exceptions/compilation.py +0 -0
  43. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/exceptions/connection.py +0 -0
  44. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/exceptions/database.py +0 -0
  45. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/protocol.py +0 -0
  46. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/py.typed +0 -0
  47. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/record/__init__.py +0 -0
  48. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/record/cursor/cursor.py +0 -0
  49. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/record/cursor/description.py +0 -0
  50. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/record/cursor/execute.py +0 -0
  51. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/record/cursor/fetchall.py +0 -0
  52. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/record/cursor/fetchmany.py +0 -0
  53. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/record/cursor/fetchone.py +0 -0
  54. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/record/cursor/rowcount.py +0 -0
  55. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/record/handle.py +0 -0
  56. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/reference_keys.py +0 -0
  57. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/relation_configs/README.md +0 -0
  58. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/relation_configs/__init__.py +0 -0
  59. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/relation_configs/config_base.py +0 -0
  60. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/relation_configs/config_change.py +0 -0
  61. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/relation_configs/config_validation.py +0 -0
  62. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/sql/__init__.py +0 -0
  63. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/sql/connections.py +0 -0
  64. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/sql/impl.py +0 -0
  65. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/adapters/utils.py +0 -0
  66. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/__init__.py +0 -0
  67. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/__init__.py +0 -0
  68. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/dbt_project.yml +0 -0
  69. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/docs/overview.md +0 -0
  70. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/adapters/apply_grants.sql +0 -0
  71. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/adapters/columns.sql +0 -0
  72. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/adapters/freshness.sql +0 -0
  73. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/adapters/indexes.sql +0 -0
  74. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/adapters/metadata.sql +0 -0
  75. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/adapters/persist_docs.sql +0 -0
  76. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/adapters/relation.sql +0 -0
  77. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/adapters/schema.sql +0 -0
  78. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/adapters/show.sql +0 -0
  79. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/adapters/validate_sql.sql +0 -0
  80. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/etc/datetime.sql +0 -0
  81. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/etc/statement.sql +0 -0
  82. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/generic_test_sql/accepted_values.sql +0 -0
  83. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/generic_test_sql/not_null.sql +0 -0
  84. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/generic_test_sql/relationships.sql +0 -0
  85. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/generic_test_sql/unique.sql +0 -0
  86. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/get_custom_name/get_custom_alias.sql +0 -0
  87. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/get_custom_name/get_custom_database.sql +0 -0
  88. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/get_custom_name/get_custom_schema.sql +0 -0
  89. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/configs.sql +0 -0
  90. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/hooks.sql +0 -0
  91. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/models/clone/can_clone_table.sql +0 -0
  92. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/models/clone/clone.sql +0 -0
  93. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/models/clone/create_or_replace_clone.sql +0 -0
  94. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/models/incremental/column_helpers.sql +0 -0
  95. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/models/incremental/incremental.sql +0 -0
  96. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/models/incremental/is_incremental.sql +0 -0
  97. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/models/incremental/merge.sql +0 -0
  98. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/models/incremental/on_schema_change.sql +0 -0
  99. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/models/materialized_view.sql +0 -0
  100. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/models/table.sql +0 -0
  101. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/models/view.sql +0 -0
  102. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/seeds/helpers.sql +0 -0
  103. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/seeds/seed.sql +0 -0
  104. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/snapshots/snapshot_merge.sql +0 -0
  105. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/snapshots/strategies.sql +0 -0
  106. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/tests/helpers.sql +0 -0
  107. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/tests/test.sql +0 -0
  108. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/tests/unit.sql +0 -0
  109. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/materializations/tests/where_subquery.sql +0 -0
  110. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/python_model/python.sql +0 -0
  111. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/column/columns_spec_ddl.sql +0 -0
  112. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/create.sql +0 -0
  113. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/create_backup.sql +0 -0
  114. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/create_intermediate.sql +0 -0
  115. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/drop.sql +0 -0
  116. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/drop_backup.sql +0 -0
  117. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/materialized_view/alter.sql +0 -0
  118. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/materialized_view/create.sql +0 -0
  119. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/materialized_view/drop.sql +0 -0
  120. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/materialized_view/refresh.sql +0 -0
  121. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/materialized_view/rename.sql +0 -0
  122. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/materialized_view/replace.sql +0 -0
  123. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/rename.sql +0 -0
  124. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/rename_intermediate.sql +0 -0
  125. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/replace.sql +0 -0
  126. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/schema.sql +0 -0
  127. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/table/create.sql +0 -0
  128. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/table/drop.sql +0 -0
  129. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/table/rename.sql +0 -0
  130. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/table/replace.sql +0 -0
  131. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/view/create.sql +0 -0
  132. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/view/drop.sql +0 -0
  133. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/view/rename.sql +0 -0
  134. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/relations/view/replace.sql +0 -0
  135. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/unit_test_sql/get_fixture_sql.sql +0 -0
  136. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/any_value.sql +0 -0
  137. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/array_append.sql +0 -0
  138. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/array_concat.sql +0 -0
  139. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/array_construct.sql +0 -0
  140. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/bool_or.sql +0 -0
  141. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/cast.sql +0 -0
  142. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/cast_bool_to_text.sql +0 -0
  143. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/concat.sql +0 -0
  144. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/data_types.sql +0 -0
  145. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/date.sql +0 -0
  146. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/date_spine.sql +0 -0
  147. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/date_trunc.sql +0 -0
  148. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/dateadd.sql +0 -0
  149. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/datediff.sql +0 -0
  150. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/escape_single_quotes.sql +0 -0
  151. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/except.sql +0 -0
  152. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/generate_series.sql +0 -0
  153. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/hash.sql +0 -0
  154. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/intersect.sql +0 -0
  155. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/last_day.sql +0 -0
  156. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/length.sql +0 -0
  157. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/listagg.sql +0 -0
  158. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/literal.sql +0 -0
  159. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/position.sql +0 -0
  160. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/replace.sql +0 -0
  161. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/right.sql +0 -0
  162. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/safe_cast.sql +0 -0
  163. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/macros/utils/split_part.sql +0 -0
  164. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/global_project/tests/generic/builtin.sql +0 -0
  165. {dbt_adapters-1.4.1 → dbt_adapters-1.6.0}/dbt/include/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dbt-adapters
3
- Version: 1.4.1
3
+ Version: 1.6.0
4
4
  Summary: The set of adapter protocols and base functionality that supports integration with dbt-core
5
5
  Project-URL: Homepage, https://github.com/dbt-labs/dbt-adapters
6
6
  Project-URL: Documentation, https://docs.getdbt.com
@@ -23,7 +23,7 @@ Classifier: Programming Language :: Python :: 3.11
23
23
  Classifier: Programming Language :: Python :: 3.12
24
24
  Requires-Python: >=3.8.0
25
25
  Requires-Dist: agate<2.0,>=1.0
26
- Requires-Dist: dbt-common<2.0,>=1.6
26
+ Requires-Dist: dbt-common<2.0,>=1.8
27
27
  Requires-Dist: mashumaro[msgpack]<4.0,>=3.0
28
28
  Requires-Dist: protobuf<5.0,>=3.0
29
29
  Requires-Dist: pytz>=2015.7
@@ -0,0 +1 @@
1
+ version = "1.6.0"
@@ -24,6 +24,7 @@ from typing import (
24
24
  )
25
25
 
26
26
  import pytz
27
+ from dbt_common.behavior_flags import Behavior, BehaviorFlag
27
28
  from dbt_common.clients.jinja import CallableMacroGenerator
28
29
  from dbt_common.contracts.constraints import (
29
30
  ColumnLevelConstraint,
@@ -54,7 +55,7 @@ from dbt.adapters.base.connections import (
54
55
  BaseConnectionManager,
55
56
  Connection,
56
57
  )
57
- from dbt.adapters.base.meta import AdapterMeta, available
58
+ from dbt.adapters.base.meta import AdapterMeta, available, available_property
58
59
  from dbt.adapters.base.relation import (
59
60
  BaseRelation,
60
61
  ComponentName,
@@ -261,7 +262,7 @@ class BaseAdapter(metaclass=AdapterMeta):
261
262
 
262
263
  MAX_SCHEMA_METADATA_RELATIONS = 100
263
264
 
264
- # This static member variable can be overriden in concrete adapter
265
+ # This static member variable can be overridden in concrete adapter
265
266
  # implementations to indicate adapter support for optional capabilities.
266
267
  _capabilities = CapabilityDict({})
267
268
 
@@ -271,6 +272,8 @@ class BaseAdapter(metaclass=AdapterMeta):
271
272
  self.connections = self.ConnectionManager(config, mp_context)
272
273
  self._macro_resolver: Optional[MacroResolverProtocol] = None
273
274
  self._macro_context_generator: Optional[MacroContextGeneratorCallable] = None
275
+ # this will be updated to include global behavior flags once they exist
276
+ self.behavior = [] # type: ignore
274
277
 
275
278
  ###
276
279
  # Methods to set / access a macro resolver
@@ -291,6 +294,27 @@ class BaseAdapter(metaclass=AdapterMeta):
291
294
  ) -> None:
292
295
  self._macro_context_generator = macro_context_generator
293
296
 
297
+ @available_property
298
+ def behavior(self) -> Behavior:
299
+ return self._behavior
300
+
301
+ @behavior.setter # type: ignore
302
+ def behavior(self, flags: List[BehaviorFlag]) -> None:
303
+ flags.extend(self._behavior_flags)
304
+ try:
305
+ # we don't always get project flags, for example during `dbt debug`
306
+ self._behavior = Behavior(flags, self.config.flags)
307
+ except AttributeError:
308
+ # in that case, don't load any behavior to avoid unexpected defaults
309
+ self._behavior = Behavior([], {})
310
+
311
+ @property
312
+ def _behavior_flags(self) -> List[BehaviorFlag]:
313
+ """
314
+ This method should be overwritten by adapter maintainers to provide platform-specific flags
315
+ """
316
+ return []
317
+
294
318
  ###
295
319
  # Methods that pass through to the connection manager
296
320
  ###
@@ -1549,7 +1573,7 @@ class BaseAdapter(metaclass=AdapterMeta):
1549
1573
  return ["append"]
1550
1574
 
1551
1575
  def builtin_incremental_strategies(self):
1552
- return ["append", "delete+insert", "merge", "insert_overwrite"]
1576
+ return ["append", "delete+insert", "merge", "insert_overwrite", "microbatch"]
1553
1577
 
1554
1578
  @available.parse_none
1555
1579
  def get_incremental_strategy_macro(self, model_context, strategy: str):
@@ -92,6 +92,25 @@ class _Available:
92
92
  available = _Available()
93
93
 
94
94
 
95
+ class available_property(property):
96
+ """
97
+ This supports making dynamic properties (`@property`) available in the jinja context.
98
+
99
+ We use `@available` to make methods available in the jinja context, but this mechanism relies on the method being callable.
100
+ Intuitively, we should be able to use both `@available` and `@property` to create a dynamic property that's available in the jinja context.
101
+
102
+ Using the `@property` decorator as the inner decorator supplies `@available` with something that is not callable.
103
+ Instead of returning the method, `@property` returns the value itself, not the method that is called to create the value.
104
+
105
+ Using the `@available` decorator as the inner decorator adds `_is_available_ = True` to the function.
106
+ However, when the `@property` decorator executes, it returns a `property` object which does not have the `_is_available_` attribute.
107
+
108
+ This decorator solves this problem by simply adding `_is_available_ = True` as an attribute on the `property` built-in.
109
+ """
110
+
111
+ _is_available_ = True
112
+
113
+
95
114
  class AdapterMeta(abc.ABCMeta):
96
115
  _available_: FrozenSet[str]
97
116
  _parse_replacements_: Dict[str, Callable]
@@ -1,5 +1,6 @@
1
1
  from collections.abc import Hashable
2
2
  from dataclasses import dataclass, field
3
+ from datetime import datetime
3
4
  from typing import (
4
5
  Any,
5
6
  Dict,
@@ -36,6 +37,13 @@ Self = TypeVar("Self", bound="BaseRelation")
36
37
  SerializableIterable = Union[Tuple, FrozenSet]
37
38
 
38
39
 
40
+ @dataclass
41
+ class EventTimeFilter(FakeAPIObject):
42
+ field_name: str
43
+ start: Optional[datetime] = None
44
+ end: Optional[datetime] = None
45
+
46
+
39
47
  @dataclass(frozen=True, eq=False, repr=False)
40
48
  class BaseRelation(FakeAPIObject, Hashable):
41
49
  path: Path
@@ -47,6 +55,7 @@ class BaseRelation(FakeAPIObject, Hashable):
47
55
  quote_policy: Policy = field(default_factory=lambda: Policy())
48
56
  dbt_created: bool = False
49
57
  limit: Optional[int] = None
58
+ event_time_filter: Optional[EventTimeFilter] = None
50
59
  require_alias: bool = (
51
60
  True # used to govern whether to add an alias when render_limited is called
52
61
  )
@@ -208,14 +217,19 @@ class BaseRelation(FakeAPIObject, Hashable):
208
217
  # if there is nothing set, this will return the empty string.
209
218
  return ".".join(part for _, part in self._render_iterator() if part is not None)
210
219
 
211
- def _render_limited_alias(self) -> str:
220
+ def _render_subquery_alias(self, namespace: str) -> str:
212
221
  """Some databases require an alias for subqueries (postgres, mysql) for all others we want to avoid adding
213
222
  an alias as it has the potential to introduce issues with the query if the user also defines an alias.
214
223
  """
215
224
  if self.require_alias:
216
- return f" _dbt_limit_subq_{self.table}"
225
+ return f" _dbt_{namespace}_subq_{self.table}"
217
226
  return ""
218
227
 
228
+ def _render_limited_alias(
229
+ self,
230
+ ) -> str:
231
+ return self._render_subquery_alias(namespace="limit")
232
+
219
233
  def render_limited(self) -> str:
220
234
  rendered = self.render()
221
235
  if self.limit is None:
@@ -225,6 +239,31 @@ class BaseRelation(FakeAPIObject, Hashable):
225
239
  else:
226
240
  return f"(select * from {rendered} limit {self.limit}){self._render_limited_alias()}"
227
241
 
242
+ def render_event_time_filtered(self, rendered: Optional[str] = None) -> str:
243
+ rendered = rendered or self.render()
244
+ if self.event_time_filter is None:
245
+ return rendered
246
+
247
+ filter = self._render_event_time_filtered(self.event_time_filter)
248
+ if not filter:
249
+ return rendered
250
+
251
+ return f"(select * from {rendered} where {filter}){self._render_subquery_alias(namespace='et_filter')}"
252
+
253
+ def _render_event_time_filtered(self, event_time_filter: EventTimeFilter) -> str:
254
+ """
255
+ Returns "" if start and end are both None
256
+ """
257
+ filter = ""
258
+ if event_time_filter.start and event_time_filter.end:
259
+ filter = f"{event_time_filter.field_name} >= '{event_time_filter.start}' and {event_time_filter.field_name} < '{event_time_filter.end}'"
260
+ elif event_time_filter.start:
261
+ filter = f"{event_time_filter.field_name} >= '{event_time_filter.start}'"
262
+ elif event_time_filter.end:
263
+ filter = f"{event_time_filter.field_name} < '{event_time_filter.end}'"
264
+
265
+ return filter
266
+
228
267
  def quoted(self, identifier):
229
268
  return "{quote_char}{identifier}{quote_char}".format(
230
269
  quote_char=self.quote_character,
@@ -240,6 +279,7 @@ class BaseRelation(FakeAPIObject, Hashable):
240
279
  cls: Type[Self],
241
280
  relation_config: RelationConfig,
242
281
  limit: Optional[int] = None,
282
+ event_time_filter: Optional[EventTimeFilter] = None,
243
283
  ) -> Self:
244
284
  # Note that ephemeral models are based on the identifier, which will
245
285
  # point to the model's alias if one exists and otherwise fall back to
@@ -250,6 +290,7 @@ class BaseRelation(FakeAPIObject, Hashable):
250
290
  type=cls.CTE,
251
291
  identifier=identifier,
252
292
  limit=limit,
293
+ event_time_filter=event_time_filter,
253
294
  ).quote(identifier=False)
254
295
 
255
296
  @classmethod
@@ -315,7 +356,14 @@ class BaseRelation(FakeAPIObject, Hashable):
315
356
  return hash(self.render())
316
357
 
317
358
  def __str__(self) -> str:
318
- return self.render() if self.limit is None else self.render_limited()
359
+ rendered = self.render() if self.limit is None else self.render_limited()
360
+
361
+ # Limited subquery is wrapped by the event time filter subquery, and not the other way around.
362
+ # This is because in the context of resolving limited refs, we care more about performance than reliably producing a sample of a certain size.
363
+ if self.event_time_filter:
364
+ rendered = self.render_event_time_filtered(rendered)
365
+
366
+ return rendered
319
367
 
320
368
  @property
321
369
  def database(self) -> Optional[str]:
@@ -188,7 +188,7 @@ class AdapterContainer:
188
188
  def get_adapter_type_names(self, name: Optional[str]) -> List[str]:
189
189
  return [p.adapter.type() for p in self.get_adapter_plugins(name)]
190
190
 
191
- def get_adapter_constraint_support(self, name: Optional[str]) -> List[str]:
191
+ def get_adapter_constraint_support(self, name: Optional[str]) -> Dict[str, str]:
192
192
  return self.lookup_adapter(name).CONSTRAINT_SUPPORT # type: ignore
193
193
 
194
194
 
@@ -251,7 +251,7 @@ def get_adapter_type_names(name: Optional[str]) -> List[str]:
251
251
  return FACTORY.get_adapter_type_names(name)
252
252
 
253
253
 
254
- def get_adapter_constraint_support(name: Optional[str]) -> List[str]:
254
+ def get_adapter_constraint_support(name: Optional[str]) -> Dict[str, str]:
255
255
  return FACTORY.get_adapter_constraint_support(name)
256
256
 
257
257
 
@@ -15,6 +15,14 @@
15
15
  {{ current_timestamp() }}
16
16
  {% endmacro %}
17
17
 
18
+ {% macro get_snapshot_get_time_data_type() %}
19
+ {% set snapshot_time = adapter.dispatch('snapshot_get_time', 'dbt')() %}
20
+ {% set time_data_type_sql = 'select ' ~ snapshot_time ~ ' as dbt_snapshot_time' %}
21
+ {% set snapshot_time_column_schema = get_column_schema_from_query(time_data_type_sql) %}
22
+ {% set time_data_type = snapshot_time_column_schema[0].dtype %}
23
+ {{ return(time_data_type or none) }}
24
+ {% endmacro %}
25
+
18
26
  ---------------------------------------------
19
27
 
20
28
  /* {#
@@ -66,6 +66,19 @@
66
66
  {% endmacro %}
67
67
 
68
68
 
69
+ {% macro get_incremental_microbatch_sql(arg_dict) %}
70
+
71
+ {{ return(adapter.dispatch('get_incremental_microbatch_sql', 'dbt')(arg_dict)) }}
72
+
73
+ {% endmacro %}
74
+
75
+ {% macro default__get_incremental_microbatch_sql(arg_dict) %}
76
+
77
+ {{ exceptions.raise_not_implemented('microbatch materialization strategy not implemented for adapter ' + adapter.type()) }}
78
+
79
+ {% endmacro %}
80
+
81
+
69
82
  {% macro get_insert_into_sql(target_relation, temp_relation, dest_columns) %}
70
83
 
71
84
  {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute="name")) -%}
@@ -179,3 +179,28 @@
179
179
 
180
180
  {% do return(temp_relation) %}
181
181
  {% endmacro %}
182
+
183
+
184
+ {% macro get_updated_at_column_data_type(snapshot_sql) %}
185
+ {% set snapshot_sql_column_schema = get_column_schema_from_query(snapshot_sql) %}
186
+ {% set dbt_updated_at_data_type = null %}
187
+ {% set ns = namespace() -%} {#-- handle for-loop scoping with a namespace --#}
188
+ {% set ns.dbt_updated_at_data_type = null -%}
189
+ {% for column in snapshot_sql_column_schema %}
190
+ {% if ((column.column == 'dbt_updated_at') or (column.column == 'DBT_UPDATED_AT')) %}
191
+ {% set ns.dbt_updated_at_data_type = column.dtype %}
192
+ {% endif %}
193
+ {% endfor %}
194
+ {{ return(ns.dbt_updated_at_data_type or none) }}
195
+ {% endmacro %}
196
+
197
+
198
+ {% macro check_time_data_types(sql) %}
199
+ {% set dbt_updated_at_data_type = get_updated_at_column_data_type(sql) %}
200
+ {% set snapshot_get_time_data_type = get_snapshot_get_time_data_type() %}
201
+ {% if snapshot_get_time_data_type is not none and dbt_updated_at_data_type is not none and snapshot_get_time_data_type != dbt_updated_at_data_type %}
202
+ {% if exceptions.warn_snapshot_timestamp_data_types %}
203
+ {{ exceptions.warn_snapshot_timestamp_data_types(snapshot_get_time_data_type, dbt_updated_at_data_type) }}
204
+ {% endif %}
205
+ {% endif %}
206
+ {% endmacro %}
@@ -29,12 +29,14 @@
29
29
  {% if not target_relation_exists %}
30
30
 
31
31
  {% set build_sql = build_snapshot_table(strategy, model['compiled_code']) %}
32
+ {% set build_or_select_sql = build_sql %}
32
33
  {% set final_sql = create_table_as(False, target_relation, build_sql) %}
33
34
 
34
35
  {% else %}
35
36
 
36
37
  {{ adapter.valid_snapshot_target(target_relation) }}
37
38
 
39
+ {% set build_or_select_sql = snapshot_staging_table(strategy, sql, target_relation) %}
38
40
  {% set staging_table = build_snapshot_staging_table(strategy, sql, target_relation) %}
39
41
 
40
42
  -- this may no-op if the database does not require column expansion
@@ -71,6 +73,9 @@
71
73
 
72
74
  {% endif %}
73
75
 
76
+
77
+ {{ check_time_data_types(build_or_select_sql) }}
78
+
74
79
  {% call statement('main') %}
75
80
  {{ final_sql }}
76
81
  {% endcall %}
@@ -24,7 +24,7 @@ classifiers = [
24
24
  "Programming Language :: Python :: 3.12",
25
25
  ]
26
26
  dependencies = [
27
- "dbt-common>=1.6,<2.0",
27
+ "dbt-common>=1.8,<2.0",
28
28
  "pytz>=2015.7",
29
29
  # installed via dbt-common but used directly
30
30
  "agate>=1.0,<2.0",
@@ -1 +0,0 @@
1
- version = "1.4.1"
File without changes
File without changes
File without changes