dbt-adapters 1.1.1__tar.gz → 1.3.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 (157) hide show
  1. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/PKG-INFO +2 -2
  2. dbt_adapters-1.3.0/dbt/adapters/__about__.py +1 -0
  3. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/base/impl.py +12 -3
  4. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/capability.py +6 -1
  5. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/contracts/relation.py +2 -1
  6. dbt_adapters-1.3.0/dbt/adapters/record.py +67 -0
  7. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/sql/connections.py +9 -9
  8. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/sql/impl.py +8 -1
  9. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/adapters/metadata.sql +9 -0
  10. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/unit_test_sql/get_fixture_sql.sql +1 -1
  11. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/pyproject.toml +4 -1
  12. dbt_adapters-1.1.1/dbt/adapters/__about__.py +0 -1
  13. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/.gitignore +0 -0
  14. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/LICENSE +0 -0
  15. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/README.md +0 -0
  16. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/__init__.py +0 -0
  17. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/__init__.py +0 -0
  18. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/base/README.md +0 -0
  19. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/base/__init__.py +0 -0
  20. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/base/column.py +0 -0
  21. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/base/connections.py +0 -0
  22. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/base/meta.py +0 -0
  23. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/base/plugin.py +0 -0
  24. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/base/query_headers.py +0 -0
  25. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/base/relation.py +0 -0
  26. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/cache.py +0 -0
  27. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/clients/__init__.py +0 -0
  28. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/clients/jinja.py +0 -0
  29. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/contracts/__init__.py +0 -0
  30. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/contracts/connection.py +0 -0
  31. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/contracts/macros.py +0 -0
  32. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/events/README.md +0 -0
  33. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/events/__init__.py +0 -0
  34. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/events/adapter_types.proto +0 -0
  35. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/events/adapter_types_pb2.py +0 -0
  36. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/events/base_types.py +0 -0
  37. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/events/logging.py +0 -0
  38. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/events/types.py +0 -0
  39. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/exceptions/__init__.py +0 -0
  40. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/exceptions/alias.py +0 -0
  41. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/exceptions/cache.py +0 -0
  42. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/exceptions/compilation.py +0 -0
  43. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/exceptions/connection.py +0 -0
  44. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/exceptions/database.py +0 -0
  45. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/factory.py +0 -0
  46. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/protocol.py +0 -0
  47. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/py.typed +0 -0
  48. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/reference_keys.py +0 -0
  49. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/relation_configs/README.md +0 -0
  50. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/relation_configs/__init__.py +0 -0
  51. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/relation_configs/config_base.py +0 -0
  52. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/relation_configs/config_change.py +0 -0
  53. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/relation_configs/config_validation.py +0 -0
  54. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/sql/__init__.py +0 -0
  55. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/adapters/utils.py +0 -0
  56. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/__init__.py +0 -0
  57. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/__init__.py +0 -0
  58. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/dbt_project.yml +0 -0
  59. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/docs/overview.md +0 -0
  60. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/adapters/apply_grants.sql +0 -0
  61. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/adapters/columns.sql +0 -0
  62. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/adapters/freshness.sql +0 -0
  63. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/adapters/indexes.sql +0 -0
  64. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/adapters/persist_docs.sql +0 -0
  65. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/adapters/relation.sql +0 -0
  66. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/adapters/schema.sql +0 -0
  67. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/adapters/show.sql +0 -0
  68. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/adapters/timestamps.sql +0 -0
  69. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/adapters/validate_sql.sql +0 -0
  70. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/etc/datetime.sql +0 -0
  71. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/etc/statement.sql +0 -0
  72. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/generic_test_sql/accepted_values.sql +0 -0
  73. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/generic_test_sql/not_null.sql +0 -0
  74. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/generic_test_sql/relationships.sql +0 -0
  75. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/generic_test_sql/unique.sql +0 -0
  76. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/get_custom_name/get_custom_alias.sql +0 -0
  77. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/get_custom_name/get_custom_database.sql +0 -0
  78. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/get_custom_name/get_custom_schema.sql +0 -0
  79. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/configs.sql +0 -0
  80. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/hooks.sql +0 -0
  81. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/models/clone/can_clone_table.sql +0 -0
  82. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/models/clone/clone.sql +0 -0
  83. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/models/clone/create_or_replace_clone.sql +0 -0
  84. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/models/incremental/column_helpers.sql +0 -0
  85. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/models/incremental/incremental.sql +0 -0
  86. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/models/incremental/is_incremental.sql +0 -0
  87. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/models/incremental/merge.sql +0 -0
  88. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/models/incremental/on_schema_change.sql +0 -0
  89. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/models/incremental/strategies.sql +0 -0
  90. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/models/materialized_view.sql +0 -0
  91. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/models/table.sql +0 -0
  92. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/models/view.sql +0 -0
  93. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/seeds/helpers.sql +0 -0
  94. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/seeds/seed.sql +0 -0
  95. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/snapshots/helpers.sql +0 -0
  96. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/snapshots/snapshot.sql +0 -0
  97. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/snapshots/snapshot_merge.sql +0 -0
  98. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/snapshots/strategies.sql +0 -0
  99. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/tests/helpers.sql +0 -0
  100. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/tests/test.sql +0 -0
  101. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/tests/unit.sql +0 -0
  102. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/materializations/tests/where_subquery.sql +0 -0
  103. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/python_model/python.sql +0 -0
  104. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/column/columns_spec_ddl.sql +0 -0
  105. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/create.sql +0 -0
  106. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/create_backup.sql +0 -0
  107. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/create_intermediate.sql +0 -0
  108. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/drop.sql +0 -0
  109. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/drop_backup.sql +0 -0
  110. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/materialized_view/alter.sql +0 -0
  111. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/materialized_view/create.sql +0 -0
  112. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/materialized_view/drop.sql +0 -0
  113. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/materialized_view/refresh.sql +0 -0
  114. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/materialized_view/rename.sql +0 -0
  115. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/materialized_view/replace.sql +0 -0
  116. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/rename.sql +0 -0
  117. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/rename_intermediate.sql +0 -0
  118. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/replace.sql +0 -0
  119. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/schema.sql +0 -0
  120. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/table/create.sql +0 -0
  121. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/table/drop.sql +0 -0
  122. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/table/rename.sql +0 -0
  123. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/table/replace.sql +0 -0
  124. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/view/create.sql +0 -0
  125. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/view/drop.sql +0 -0
  126. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/view/rename.sql +0 -0
  127. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/relations/view/replace.sql +0 -0
  128. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/any_value.sql +0 -0
  129. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/array_append.sql +0 -0
  130. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/array_concat.sql +0 -0
  131. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/array_construct.sql +0 -0
  132. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/bool_or.sql +0 -0
  133. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/cast.sql +0 -0
  134. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/cast_bool_to_text.sql +0 -0
  135. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/concat.sql +0 -0
  136. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/data_types.sql +0 -0
  137. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/date.sql +0 -0
  138. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/date_spine.sql +0 -0
  139. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/date_trunc.sql +0 -0
  140. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/dateadd.sql +0 -0
  141. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/datediff.sql +0 -0
  142. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/escape_single_quotes.sql +0 -0
  143. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/except.sql +0 -0
  144. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/generate_series.sql +0 -0
  145. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/hash.sql +0 -0
  146. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/intersect.sql +0 -0
  147. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/last_day.sql +0 -0
  148. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/length.sql +0 -0
  149. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/listagg.sql +0 -0
  150. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/literal.sql +0 -0
  151. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/position.sql +0 -0
  152. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/replace.sql +0 -0
  153. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/right.sql +0 -0
  154. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/safe_cast.sql +0 -0
  155. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/macros/utils/split_part.sql +0 -0
  156. {dbt_adapters-1.1.1 → dbt_adapters-1.3.0}/dbt/include/global_project/tests/generic/builtin.sql +0 -0
  157. {dbt_adapters-1.1.1 → dbt_adapters-1.3.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.1.1
3
+ Version: 1.3.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
26
+ Requires-Dist: dbt-common<2.0,>=1.3
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.3.0"
@@ -1,10 +1,10 @@
1
1
  import abc
2
+ import time
2
3
  from concurrent.futures import as_completed, Future
3
4
  from contextlib import contextmanager
4
5
  from datetime import datetime
5
6
  from enum import Enum
6
7
  from multiprocessing.context import SpawnContext
7
- import time
8
8
  from typing import (
9
9
  Any,
10
10
  Callable,
@@ -23,12 +23,15 @@ from typing import (
23
23
  TYPE_CHECKING,
24
24
  )
25
25
 
26
+ import pytz
26
27
  from dbt_common.clients.jinja import CallableMacroGenerator
27
28
  from dbt_common.contracts.constraints import (
28
29
  ColumnLevelConstraint,
29
30
  ConstraintType,
30
31
  ModelLevelConstraint,
31
32
  )
33
+ from dbt_common.contracts.metadata import CatalogTable
34
+ from dbt_common.events.functions import fire_event, warn_or_error
32
35
  from dbt_common.exceptions import (
33
36
  DbtInternalError,
34
37
  DbtRuntimeError,
@@ -38,14 +41,12 @@ from dbt_common.exceptions import (
38
41
  NotImplementedError,
39
42
  UnexpectedNullError,
40
43
  )
41
- from dbt_common.events.functions import fire_event, warn_or_error
42
44
  from dbt_common.utils import (
43
45
  AttrDict,
44
46
  cast_to_str,
45
47
  executor,
46
48
  filter_null_values,
47
49
  )
48
- import pytz
49
50
 
50
51
  from dbt.adapters.base.column import Column as BaseColumn
51
52
  from dbt.adapters.base.connections import (
@@ -222,6 +223,7 @@ class BaseAdapter(metaclass=AdapterMeta):
222
223
  - truncate_relation
223
224
  - rename_relation
224
225
  - get_columns_in_relation
226
+ - get_catalog_for_single_relation
225
227
  - get_column_schema_from_query
226
228
  - expand_column_types
227
229
  - list_relations_without_caching
@@ -627,6 +629,13 @@ class BaseAdapter(metaclass=AdapterMeta):
627
629
  """Get a list of the columns in the given Relation."""
628
630
  raise NotImplementedError("`get_columns_in_relation` is not implemented for this adapter!")
629
631
 
632
+ @abc.abstractmethod
633
+ def get_catalog_for_single_relation(self, relation: BaseRelation) -> Optional[CatalogTable]:
634
+ """Get catalog information including table-level and column-level metadata for a single relation."""
635
+ raise NotImplementedError(
636
+ "`get_catalog_for_single_relation` is not implemented for this adapter!"
637
+ )
638
+
630
639
  @available.deprecated("get_columns_in_relation", lambda *a, **k: [])
631
640
  def get_columns_in_table(self, schema: str, identifier: str) -> List[BaseColumn]:
632
641
  """DEPRECATED: Get a list of the columns in the given table."""
@@ -14,7 +14,12 @@ class Capability(str, Enum):
14
14
  """Indicates support for determining the time of the last table modification by querying database metadata."""
15
15
 
16
16
  TableLastModifiedMetadataBatch = "TableLastModifiedMetadataBatch"
17
- """Indicates support for performantly determining the time of the last table modification by querying database metadata in batch."""
17
+ """Indicates support for performantly determining the time of the last table modification by querying database
18
+ metadata in batch."""
19
+
20
+ GetCatalogForSingleRelation = "GetCatalogForSingleRelation"
21
+ """Indicates support for getting catalog information including table-level and column-level metadata for a single
22
+ relation."""
18
23
 
19
24
 
20
25
  class Support(str, Enum):
@@ -18,8 +18,9 @@ class RelationType(StrEnum):
18
18
  View = "view"
19
19
  CTE = "cte"
20
20
  MaterializedView = "materialized_view"
21
- External = "external"
22
21
  Ephemeral = "ephemeral"
22
+ # this is a "catch all" that is better than `None` == external to anything dbt is aware of
23
+ External = "external"
23
24
 
24
25
 
25
26
  class MaterializationContract(Protocol):
@@ -0,0 +1,67 @@
1
+ import dataclasses
2
+ from io import StringIO
3
+ import json
4
+ import re
5
+ from typing import Any, Optional, Mapping
6
+
7
+ from agate import Table
8
+
9
+ from dbt_common.events.contextvars import get_node_info
10
+ from dbt_common.record import Record, Recorder
11
+
12
+ from dbt.adapters.contracts.connection import AdapterResponse
13
+
14
+
15
+ @dataclasses.dataclass
16
+ class QueryRecordParams:
17
+ sql: str
18
+ auto_begin: bool = False
19
+ fetch: bool = False
20
+ limit: Optional[int] = None
21
+ node_unique_id: Optional[str] = None
22
+
23
+ def __post_init__(self) -> None:
24
+ if self.node_unique_id is None:
25
+ node_info = get_node_info()
26
+ self.node_unique_id = node_info["unique_id"] if node_info else ""
27
+
28
+ @staticmethod
29
+ def _clean_up_sql(sql: str) -> str:
30
+ sql = re.sub(r"--.*?\n", "", sql) # Remove single-line comments (--)
31
+ sql = re.sub(r"/\*.*?\*/", "", sql, flags=re.DOTALL) # Remove multi-line comments (/* */)
32
+ return sql.replace(" ", "").replace("\n", "")
33
+
34
+ def _matches(self, other: "QueryRecordParams") -> bool:
35
+ return self.node_unique_id == other.node_unique_id and self._clean_up_sql(
36
+ self.sql
37
+ ) == self._clean_up_sql(other.sql)
38
+
39
+
40
+ @dataclasses.dataclass
41
+ class QueryRecordResult:
42
+ adapter_response: Optional["AdapterResponse"]
43
+ table: Optional[Table]
44
+
45
+ def _to_dict(self) -> Any:
46
+ buf = StringIO()
47
+ self.table.to_json(buf) # type: ignore
48
+
49
+ return {
50
+ "adapter_response": self.adapter_response.to_dict(), # type: ignore
51
+ "table": buf.getvalue(),
52
+ }
53
+
54
+ @classmethod
55
+ def _from_dict(cls, dct: Mapping) -> "QueryRecordResult":
56
+ return QueryRecordResult(
57
+ adapter_response=AdapterResponse.from_dict(dct["adapter_response"]),
58
+ table=Table.from_object(json.loads(dct["table"])),
59
+ )
60
+
61
+
62
+ class QueryRecord(Record):
63
+ params_cls = QueryRecordParams
64
+ result_cls = QueryRecordResult
65
+
66
+
67
+ Recorder.register_record_type(QueryRecord)
@@ -1,10 +1,11 @@
1
1
  import abc
2
2
  import time
3
- from typing import Any, Dict, Iterable, List, Optional, Tuple, TYPE_CHECKING
3
+ from typing import Any, Dict, Iterable, Iterator, List, Optional, Tuple, TYPE_CHECKING
4
4
 
5
5
  from dbt_common.events.contextvars import get_node_info
6
6
  from dbt_common.events.functions import fire_event
7
7
  from dbt_common.exceptions import DbtInternalError, NotImplementedError
8
+ from dbt_common.record import record_function
8
9
  from dbt_common.utils import cast_to_str
9
10
 
10
11
  from dbt.adapters.base import BaseConnectionManager
@@ -19,6 +20,7 @@ from dbt.adapters.events.types import (
19
20
  SQLQuery,
20
21
  SQLQueryStatus,
21
22
  )
23
+ from dbt.adapters.record import QueryRecord
22
24
 
23
25
  if TYPE_CHECKING:
24
26
  import agate
@@ -110,27 +112,24 @@ class SQLConnectionManager(BaseConnectionManager):
110
112
  @classmethod
111
113
  def process_results(
112
114
  cls, column_names: Iterable[str], rows: Iterable[Any]
113
- ) -> List[Dict[str, Any]]:
114
- # TODO CT-211
115
+ ) -> Iterator[Dict[str, Any]]:
115
116
  unique_col_names = dict() # type: ignore[var-annotated]
116
- # TODO CT-211
117
117
  for idx in range(len(column_names)): # type: ignore[arg-type]
118
- # TODO CT-211
119
118
  col_name = column_names[idx] # type: ignore[index]
120
119
  if col_name in unique_col_names:
121
120
  unique_col_names[col_name] += 1
122
- # TODO CT-211
123
121
  column_names[idx] = f"{col_name}_{unique_col_names[col_name]}" # type: ignore[index] # noqa
124
122
  else:
125
- # TODO CT-211
126
123
  unique_col_names[column_names[idx]] = 1 # type: ignore[index]
127
- return [dict(zip(column_names, row)) for row in rows]
124
+
125
+ for row in rows:
126
+ yield dict(zip(column_names, row))
128
127
 
129
128
  @classmethod
130
129
  def get_result_from_cursor(cls, cursor: Any, limit: Optional[int]) -> "agate.Table":
131
130
  from dbt_common.clients.agate_helper import table_from_data_flat
132
131
 
133
- data: List[Any] = []
132
+ data: Iterable[Any] = []
134
133
  column_names: List[str] = []
135
134
 
136
135
  if cursor.description is not None:
@@ -143,6 +142,7 @@ class SQLConnectionManager(BaseConnectionManager):
143
142
 
144
143
  return table_from_data_flat(data, column_names)
145
144
 
145
+ @record_function(QueryRecord, method=True, tuple_result=True)
146
146
  def execute(
147
147
  self,
148
148
  sql: str,
@@ -1,5 +1,6 @@
1
1
  from typing import Any, List, Optional, Tuple, Type, TYPE_CHECKING
2
2
 
3
+ from dbt_common.contracts.metadata import CatalogTable
3
4
  from dbt_common.events.functions import fire_event
4
5
 
5
6
  from dbt.adapters.base import BaseAdapter, BaseRelation, available
@@ -9,9 +10,9 @@ from dbt.adapters.events.types import ColTypeChange, SchemaCreation, SchemaDrop
9
10
  from dbt.adapters.exceptions import RelationTypeNullError
10
11
  from dbt.adapters.sql.connections import SQLConnectionManager
11
12
 
12
-
13
13
  LIST_RELATIONS_MACRO_NAME = "list_relations_without_caching"
14
14
  GET_COLUMNS_IN_RELATION_MACRO_NAME = "get_columns_in_relation"
15
+ GET_CATALOG_FOR_SINGLE_RELATION_NAME = "get_catalog_for_single_relation"
15
16
  LIST_SCHEMAS_MACRO_NAME = "list_schemas"
16
17
  CHECK_SCHEMA_EXISTS_MACRO_NAME = "check_schema_exists"
17
18
  CREATE_SCHEMA_MACRO_NAME = "create_schema"
@@ -41,6 +42,7 @@ class SQLAdapter(BaseAdapter):
41
42
  - get_catalog
42
43
  - list_relations_without_caching
43
44
  - get_columns_in_relation
45
+ - get_catalog_for_single_relation
44
46
  """
45
47
 
46
48
  ConnectionManager: Type[SQLConnectionManager]
@@ -158,6 +160,11 @@ class SQLAdapter(BaseAdapter):
158
160
  GET_COLUMNS_IN_RELATION_MACRO_NAME, kwargs={"relation": relation}
159
161
  )
160
162
 
163
+ def get_catalog_for_single_relation(self, relation: BaseRelation) -> Optional[CatalogTable]:
164
+ return self.execute_macro(
165
+ GET_CATALOG_FOR_SINGLE_RELATION_NAME, kwargs={"relation": relation}
166
+ )
167
+
161
168
  def create_schema(self, relation: BaseRelation) -> None:
162
169
  relation = relation.without_identifier()
163
170
  fire_event(SchemaCreation(relation=_make_ref_key_dict(relation)))
@@ -77,6 +77,15 @@
77
77
  'list_relations_without_caching macro not implemented for adapter '+adapter.type()) }}
78
78
  {% endmacro %}
79
79
 
80
+ {% macro get_catalog_for_single_relation(relation) %}
81
+ {{ return(adapter.dispatch('get_catalog_for_single_relation', 'dbt')(relation)) }}
82
+ {% endmacro %}
83
+
84
+ {% macro default__get_catalog_for_single_relation(relation) %}
85
+ {{ exceptions.raise_not_implemented(
86
+ 'get_catalog_for_single_relation macro not implemented for adapter '+adapter.type()) }}
87
+ {% endmacro %}
88
+
80
89
  {% macro get_relations() %}
81
90
  {{ return(adapter.dispatch('get_relations', 'dbt')()) }}
82
91
  {% endmacro %}
@@ -15,7 +15,7 @@
15
15
  {%- endif -%}
16
16
 
17
17
  {%- if not column_name_to_data_types -%}
18
- {{ exceptions.raise_compiler_error("Not able to get columns for unit test '" ~ model.name ~ "' from relation " ~ this) }}
18
+ {{ exceptions.raise_compiler_error("Not able to get columns for unit test '" ~ model.name ~ "' from relation " ~ this ~ " because the relation doesn't exist") }}
19
19
  {%- endif -%}
20
20
 
21
21
  {%- for column_name, column_type in column_name_to_data_types.items() -%}
@@ -24,7 +24,7 @@ classifiers = [
24
24
  "Programming Language :: Python :: 3.12",
25
25
  ]
26
26
  dependencies = [
27
- "dbt-common<2.0",
27
+ "dbt-common>=1.3,<2.0",
28
28
  "pytz>=2015.7",
29
29
  # installed via dbt-common but used directly
30
30
  "agate>=1.0,<2.0",
@@ -43,6 +43,9 @@ Changelog = "https://github.com/dbt-labs/dbt-adapters/blob/main/CHANGELOG.md"
43
43
  requires = ["hatchling"]
44
44
  build-backend = "hatchling.build"
45
45
 
46
+ [tool.hatch.metadata]
47
+ allow-direct-references = true
48
+
46
49
  [tool.hatch.version]
47
50
  path = "dbt/adapters/__about__.py"
48
51
 
@@ -1 +0,0 @@
1
- version = "1.1.1"
File without changes
File without changes
File without changes