dbt-adapters 1.3.3__tar.gz → 1.4.1__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 (166) hide show
  1. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/.gitignore +1 -1
  2. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/PKG-INFO +3 -3
  3. dbt_adapters-1.4.1/dbt/adapters/__about__.py +1 -0
  4. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/base/column.py +0 -3
  5. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/base/impl.py +24 -10
  6. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/base/relation.py +5 -2
  7. dbt_adapters-1.4.1/dbt/adapters/record/__init__.py +2 -0
  8. dbt_adapters-1.4.1/dbt/adapters/record/cursor/cursor.py +54 -0
  9. dbt_adapters-1.4.1/dbt/adapters/record/cursor/description.py +37 -0
  10. dbt_adapters-1.4.1/dbt/adapters/record/cursor/execute.py +20 -0
  11. dbt_adapters-1.4.1/dbt/adapters/record/cursor/fetchall.py +66 -0
  12. dbt_adapters-1.4.1/dbt/adapters/record/cursor/fetchmany.py +23 -0
  13. dbt_adapters-1.4.1/dbt/adapters/record/cursor/fetchone.py +23 -0
  14. dbt_adapters-1.4.1/dbt/adapters/record/cursor/rowcount.py +23 -0
  15. dbt_adapters-1.4.1/dbt/adapters/record/handle.py +24 -0
  16. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/sql/connections.py +0 -3
  17. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/models/incremental/incremental.sql +6 -3
  18. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/unit_test_sql/get_fixture_sql.sql +9 -0
  19. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/pyproject.toml +6 -15
  20. dbt_adapters-1.3.3/dbt/adapters/__about__.py +0 -1
  21. dbt_adapters-1.3.3/dbt/adapters/record.py +0 -67
  22. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/LICENSE +0 -0
  23. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/README.md +0 -0
  24. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/__init__.py +0 -0
  25. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/__init__.py +0 -0
  26. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/base/README.md +0 -0
  27. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/base/__init__.py +0 -0
  28. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/base/connections.py +0 -0
  29. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/base/meta.py +0 -0
  30. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/base/plugin.py +0 -0
  31. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/base/query_headers.py +0 -0
  32. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/cache.py +0 -0
  33. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/capability.py +0 -0
  34. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/clients/__init__.py +0 -0
  35. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/clients/jinja.py +0 -0
  36. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/contracts/__init__.py +0 -0
  37. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/contracts/connection.py +0 -0
  38. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/contracts/macros.py +0 -0
  39. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/contracts/relation.py +0 -0
  40. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/events/README.md +0 -0
  41. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/events/__init__.py +0 -0
  42. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/events/adapter_types.proto +0 -0
  43. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/events/adapter_types_pb2.py +0 -0
  44. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/events/base_types.py +0 -0
  45. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/events/logging.py +0 -0
  46. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/events/types.py +0 -0
  47. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/exceptions/__init__.py +0 -0
  48. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/exceptions/alias.py +0 -0
  49. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/exceptions/cache.py +0 -0
  50. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/exceptions/compilation.py +0 -0
  51. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/exceptions/connection.py +0 -0
  52. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/exceptions/database.py +0 -0
  53. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/factory.py +0 -0
  54. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/protocol.py +0 -0
  55. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/py.typed +0 -0
  56. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/reference_keys.py +0 -0
  57. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/relation_configs/README.md +0 -0
  58. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/relation_configs/__init__.py +0 -0
  59. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/relation_configs/config_base.py +0 -0
  60. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/relation_configs/config_change.py +0 -0
  61. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/relation_configs/config_validation.py +0 -0
  62. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/sql/__init__.py +0 -0
  63. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/sql/impl.py +0 -0
  64. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/adapters/utils.py +0 -0
  65. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/__init__.py +0 -0
  66. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/__init__.py +0 -0
  67. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/dbt_project.yml +0 -0
  68. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/docs/overview.md +0 -0
  69. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/adapters/apply_grants.sql +0 -0
  70. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/adapters/columns.sql +0 -0
  71. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/adapters/freshness.sql +0 -0
  72. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/adapters/indexes.sql +0 -0
  73. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/adapters/metadata.sql +0 -0
  74. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/adapters/persist_docs.sql +0 -0
  75. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/adapters/relation.sql +0 -0
  76. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/adapters/schema.sql +0 -0
  77. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/adapters/show.sql +0 -0
  78. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/adapters/timestamps.sql +0 -0
  79. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/adapters/validate_sql.sql +0 -0
  80. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/etc/datetime.sql +0 -0
  81. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/etc/statement.sql +0 -0
  82. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/generic_test_sql/accepted_values.sql +0 -0
  83. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/generic_test_sql/not_null.sql +0 -0
  84. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/generic_test_sql/relationships.sql +0 -0
  85. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/generic_test_sql/unique.sql +0 -0
  86. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/get_custom_name/get_custom_alias.sql +0 -0
  87. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/get_custom_name/get_custom_database.sql +0 -0
  88. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/get_custom_name/get_custom_schema.sql +0 -0
  89. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/configs.sql +0 -0
  90. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/hooks.sql +0 -0
  91. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/models/clone/can_clone_table.sql +0 -0
  92. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/models/clone/clone.sql +0 -0
  93. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/models/clone/create_or_replace_clone.sql +0 -0
  94. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/models/incremental/column_helpers.sql +0 -0
  95. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/models/incremental/is_incremental.sql +0 -0
  96. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/models/incremental/merge.sql +0 -0
  97. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/models/incremental/on_schema_change.sql +0 -0
  98. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/models/incremental/strategies.sql +0 -0
  99. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/models/materialized_view.sql +0 -0
  100. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/models/table.sql +0 -0
  101. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/models/view.sql +0 -0
  102. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/seeds/helpers.sql +0 -0
  103. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/seeds/seed.sql +0 -0
  104. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/snapshots/helpers.sql +0 -0
  105. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/snapshots/snapshot.sql +0 -0
  106. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/snapshots/snapshot_merge.sql +0 -0
  107. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/snapshots/strategies.sql +0 -0
  108. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/tests/helpers.sql +0 -0
  109. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/tests/test.sql +0 -0
  110. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/tests/unit.sql +0 -0
  111. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/materializations/tests/where_subquery.sql +0 -0
  112. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/python_model/python.sql +0 -0
  113. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/column/columns_spec_ddl.sql +0 -0
  114. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/create.sql +0 -0
  115. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/create_backup.sql +0 -0
  116. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/create_intermediate.sql +0 -0
  117. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/drop.sql +0 -0
  118. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/drop_backup.sql +0 -0
  119. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/materialized_view/alter.sql +0 -0
  120. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/materialized_view/create.sql +0 -0
  121. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/materialized_view/drop.sql +0 -0
  122. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/materialized_view/refresh.sql +0 -0
  123. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/materialized_view/rename.sql +0 -0
  124. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/materialized_view/replace.sql +0 -0
  125. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/rename.sql +0 -0
  126. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/rename_intermediate.sql +0 -0
  127. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/replace.sql +0 -0
  128. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/schema.sql +0 -0
  129. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/table/create.sql +0 -0
  130. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/table/drop.sql +0 -0
  131. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/table/rename.sql +0 -0
  132. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/table/replace.sql +0 -0
  133. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/view/create.sql +0 -0
  134. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/view/drop.sql +0 -0
  135. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/view/rename.sql +0 -0
  136. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/relations/view/replace.sql +0 -0
  137. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/any_value.sql +0 -0
  138. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/array_append.sql +0 -0
  139. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/array_concat.sql +0 -0
  140. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/array_construct.sql +0 -0
  141. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/bool_or.sql +0 -0
  142. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/cast.sql +0 -0
  143. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/cast_bool_to_text.sql +0 -0
  144. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/concat.sql +0 -0
  145. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/data_types.sql +0 -0
  146. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/date.sql +0 -0
  147. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/date_spine.sql +0 -0
  148. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/date_trunc.sql +0 -0
  149. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/dateadd.sql +0 -0
  150. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/datediff.sql +0 -0
  151. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/escape_single_quotes.sql +0 -0
  152. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/except.sql +0 -0
  153. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/generate_series.sql +0 -0
  154. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/hash.sql +0 -0
  155. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/intersect.sql +0 -0
  156. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/last_day.sql +0 -0
  157. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/length.sql +0 -0
  158. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/listagg.sql +0 -0
  159. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/literal.sql +0 -0
  160. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/position.sql +0 -0
  161. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/replace.sql +0 -0
  162. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/right.sql +0 -0
  163. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/safe_cast.sql +0 -0
  164. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/macros/utils/split_part.sql +0 -0
  165. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/global_project/tests/generic/builtin.sql +0 -0
  166. {dbt_adapters-1.3.3 → dbt_adapters-1.4.1}/dbt/include/py.typed +0 -0
@@ -158,7 +158,7 @@ cython_debug/
158
158
  # MacOS
159
159
  .DS_Store
160
160
 
161
- # vscode
161
+ # VSCode
162
162
  .vscode/
163
163
  .venv/
164
164
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dbt-adapters
3
- Version: 1.3.3
3
+ Version: 1.4.1
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
@@ -11,7 +11,7 @@ Author-email: dbt Labs <info@dbtlabs.com>
11
11
  Maintainer-email: dbt Labs <info@dbtlabs.com>
12
12
  License-File: LICENSE
13
13
  Keywords: adapter,adapters,database,dbt,dbt Cloud,dbt Core,dbt Labs,dbt-core,elt
14
- Classifier: Development Status :: 2 - Pre-Alpha
14
+ Classifier: Development Status :: 5 - Production/Stable
15
15
  Classifier: License :: OSI Approved :: Apache Software License
16
16
  Classifier: Operating System :: MacOS :: MacOS X
17
17
  Classifier: Operating System :: Microsoft :: Windows
@@ -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.3
26
+ Requires-Dist: dbt-common<2.0,>=1.6
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.4.1"
@@ -123,9 +123,6 @@ class Column:
123
123
  else:
124
124
  return "{}({},{})".format(dtype, precision, scale)
125
125
 
126
- def __repr__(self) -> str:
127
- return "<Column {} ({})>".format(self.name, self.data_type)
128
-
129
126
  @classmethod
130
127
  def from_description(cls, name: str, raw_data_type: str) -> "Column":
131
128
  match = re.match(r"([^(]+)(\([^)]+\))?", raw_data_type)
@@ -1602,8 +1602,13 @@ class BaseAdapter(metaclass=AdapterMeta):
1602
1602
  rendered_column_constraint = f"unique {constraint_expression}"
1603
1603
  elif constraint.type == ConstraintType.primary_key:
1604
1604
  rendered_column_constraint = f"primary key {constraint_expression}"
1605
- elif constraint.type == ConstraintType.foreign_key and constraint_expression:
1606
- rendered_column_constraint = f"references {constraint_expression}"
1605
+ elif constraint.type == ConstraintType.foreign_key:
1606
+ if constraint.to and constraint.to_columns:
1607
+ rendered_column_constraint = (
1608
+ f"references {constraint.to} ({', '.join(constraint.to_columns)})"
1609
+ )
1610
+ elif constraint_expression:
1611
+ rendered_column_constraint = f"references {constraint_expression}"
1607
1612
  elif constraint.type == ConstraintType.custom and constraint_expression:
1608
1613
  rendered_column_constraint = constraint_expression
1609
1614
 
@@ -1682,20 +1687,29 @@ class BaseAdapter(metaclass=AdapterMeta):
1682
1687
  rendering."""
1683
1688
  constraint_prefix = f"constraint {constraint.name} " if constraint.name else ""
1684
1689
  column_list = ", ".join(constraint.columns)
1690
+ rendered_model_constraint = None
1691
+
1685
1692
  if constraint.type == ConstraintType.check and constraint.expression:
1686
- return f"{constraint_prefix}check ({constraint.expression})"
1693
+ rendered_model_constraint = f"{constraint_prefix}check ({constraint.expression})"
1687
1694
  elif constraint.type == ConstraintType.unique:
1688
1695
  constraint_expression = f" {constraint.expression}" if constraint.expression else ""
1689
- return f"{constraint_prefix}unique{constraint_expression} ({column_list})"
1696
+ rendered_model_constraint = (
1697
+ f"{constraint_prefix}unique{constraint_expression} ({column_list})"
1698
+ )
1690
1699
  elif constraint.type == ConstraintType.primary_key:
1691
1700
  constraint_expression = f" {constraint.expression}" if constraint.expression else ""
1692
- return f"{constraint_prefix}primary key{constraint_expression} ({column_list})"
1693
- elif constraint.type == ConstraintType.foreign_key and constraint.expression:
1694
- return f"{constraint_prefix}foreign key ({column_list}) references {constraint.expression}"
1701
+ rendered_model_constraint = (
1702
+ f"{constraint_prefix}primary key{constraint_expression} ({column_list})"
1703
+ )
1704
+ elif constraint.type == ConstraintType.foreign_key:
1705
+ if constraint.to and constraint.to_columns:
1706
+ rendered_model_constraint = f"{constraint_prefix}foreign key ({column_list}) references {constraint.to} ({', '.join(constraint.to_columns)})"
1707
+ elif constraint.expression:
1708
+ rendered_model_constraint = f"{constraint_prefix}foreign key ({column_list}) references {constraint.expression}"
1695
1709
  elif constraint.type == ConstraintType.custom and constraint.expression:
1696
- return f"{constraint_prefix}{constraint.expression}"
1697
- else:
1698
- return None
1710
+ rendered_model_constraint = f"{constraint_prefix}{constraint.expression}"
1711
+
1712
+ return rendered_model_constraint
1699
1713
 
1700
1714
  @classmethod
1701
1715
  def capabilities(cls) -> CapabilityDict:
@@ -241,8 +241,11 @@ class BaseRelation(FakeAPIObject, Hashable):
241
241
  relation_config: RelationConfig,
242
242
  limit: Optional[int] = None,
243
243
  ) -> Self:
244
- # Note that ephemeral models are based on the name.
245
- identifier = cls.add_ephemeral_prefix(relation_config.name)
244
+ # Note that ephemeral models are based on the identifier, which will
245
+ # point to the model's alias if one exists and otherwise fall back to
246
+ # the filename. This is intended to give the user more control over
247
+ # the way that the CTE name is constructed
248
+ identifier = cls.add_ephemeral_prefix(relation_config.identifier)
246
249
  return cls.create(
247
250
  type=cls.CTE,
248
251
  identifier=identifier,
@@ -0,0 +1,2 @@
1
+ from dbt.adapters.record.handle import RecordReplayHandle
2
+ from dbt.adapters.record.cursor.cursor import RecordReplayCursor
@@ -0,0 +1,54 @@
1
+ from typing import Any, Optional
2
+
3
+ from dbt_common.record import record_function
4
+
5
+ from dbt.adapters.contracts.connection import Connection
6
+ from dbt.adapters.record.cursor.description import CursorGetDescriptionRecord
7
+ from dbt.adapters.record.cursor.execute import CursorExecuteRecord
8
+ from dbt.adapters.record.cursor.fetchone import CursorFetchOneRecord
9
+ from dbt.adapters.record.cursor.fetchmany import CursorFetchManyRecord
10
+ from dbt.adapters.record.cursor.fetchall import CursorFetchAllRecord
11
+ from dbt.adapters.record.cursor.rowcount import CursorGetRowCountRecord
12
+
13
+
14
+ class RecordReplayCursor:
15
+ """A proxy object used to wrap native database cursors under record/replay
16
+ modes. In record mode, this proxy notes the parameters and return values
17
+ of the methods and properties it implements, which closely match the Python
18
+ DB API 2.0 cursor methods used by many dbt adapters to interact with the
19
+ database or DWH. In replay mode, it mocks out those calls using previously
20
+ recorded calls, so that no interaction with a database actually occurs."""
21
+
22
+ def __init__(self, native_cursor: Any, connection: Connection) -> None:
23
+ self.native_cursor = native_cursor
24
+ self.connection = connection
25
+
26
+ @record_function(CursorExecuteRecord, method=True, id_field_name="connection_name")
27
+ def execute(self, operation, parameters=None) -> None:
28
+ self.native_cursor.execute(operation, parameters)
29
+
30
+ @record_function(CursorFetchOneRecord, method=True, id_field_name="connection_name")
31
+ def fetchone(self) -> Any:
32
+ return self.native_cursor.fetchone()
33
+
34
+ @record_function(CursorFetchManyRecord, method=True, id_field_name="connection_name")
35
+ def fetchmany(self, size: int) -> Any:
36
+ return self.native_cursor.fetchmany(size)
37
+
38
+ @record_function(CursorFetchAllRecord, method=True, id_field_name="connection_name")
39
+ def fetchall(self) -> Any:
40
+ return self.native_cursor.fetchall()
41
+
42
+ @property
43
+ def connection_name(self) -> Optional[str]:
44
+ return self.connection.name
45
+
46
+ @property
47
+ @record_function(CursorGetRowCountRecord, method=True, id_field_name="connection_name")
48
+ def rowcount(self) -> int:
49
+ return self.native_cursor.rowcount
50
+
51
+ @property
52
+ @record_function(CursorGetDescriptionRecord, method=True, id_field_name="connection_name")
53
+ def description(self) -> str:
54
+ return self.native_cursor.description
@@ -0,0 +1,37 @@
1
+ import dataclasses
2
+ from typing import Any, Iterable, Mapping
3
+
4
+ from dbt_common.record import Record, Recorder
5
+
6
+
7
+ @dataclasses.dataclass
8
+ class CursorGetDescriptionParams:
9
+ connection_name: str
10
+
11
+
12
+ @dataclasses.dataclass
13
+ class CursorGetDescriptionResult:
14
+ columns: Iterable[Any]
15
+
16
+ def _to_dict(self) -> Any:
17
+ column_dicts = []
18
+ for c in self.columns:
19
+ # This captures the mandatory column information, but we might need
20
+ # more for some adapters.
21
+ # See https://peps.python.org/pep-0249/#description
22
+ column_dicts.append((c[0], c[1]))
23
+
24
+ return {"columns": column_dicts}
25
+
26
+ @classmethod
27
+ def _from_dict(cls, dct: Mapping) -> "CursorGetDescriptionResult":
28
+ return CursorGetDescriptionResult(columns=dct["columns"])
29
+
30
+
31
+ @Recorder.register_record_type
32
+ class CursorGetDescriptionRecord(Record):
33
+ """Implements record/replay support for the cursor.description property."""
34
+
35
+ params_cls = CursorGetDescriptionParams
36
+ result_cls = CursorGetDescriptionResult
37
+ group = "Database"
@@ -0,0 +1,20 @@
1
+ import dataclasses
2
+ from typing import Any, Iterable, Union, Mapping
3
+
4
+ from dbt_common.record import Record, Recorder
5
+
6
+
7
+ @dataclasses.dataclass
8
+ class CursorExecuteParams:
9
+ connection_name: str
10
+ operation: str
11
+ parameters: Union[Iterable[Any], Mapping[str, Any]]
12
+
13
+
14
+ @Recorder.register_record_type
15
+ class CursorExecuteRecord(Record):
16
+ """Implements record/replay support for the cursor.execute() method."""
17
+
18
+ params_cls = CursorExecuteParams
19
+ result_cls = None
20
+ group = "Database"
@@ -0,0 +1,66 @@
1
+ import dataclasses
2
+ import datetime
3
+ from typing import Any, Dict, List, Mapping
4
+
5
+ from dbt_common.record import Record, Recorder
6
+
7
+
8
+ @dataclasses.dataclass
9
+ class CursorFetchAllParams:
10
+ connection_name: str
11
+
12
+
13
+ @dataclasses.dataclass
14
+ class CursorFetchAllResult:
15
+ results: List[Any]
16
+
17
+ def _to_dict(self) -> Dict[str, Any]:
18
+ processed_results = []
19
+ for result in self.results:
20
+ result = tuple(map(self._process_value, result))
21
+ processed_results.append(result)
22
+
23
+ return {"results": processed_results}
24
+
25
+ @classmethod
26
+ def _from_dict(cls, dct: Mapping) -> "CursorFetchAllResult":
27
+ unprocessed_results = []
28
+ for result in dct["results"]:
29
+ result = tuple(map(cls._unprocess_value, result))
30
+ unprocessed_results.append(result)
31
+
32
+ return CursorFetchAllResult(unprocessed_results)
33
+
34
+ @classmethod
35
+ def _process_value(cls, value: Any) -> Any:
36
+ if type(value) is datetime.date:
37
+ return {"type": "date", "value": value.isoformat()}
38
+ elif type(value) is datetime.datetime:
39
+ return {"type": "datetime", "value": value.isoformat()}
40
+ else:
41
+ return value
42
+
43
+ @classmethod
44
+ def _unprocess_value(cls, value: Any) -> Any:
45
+ if type(value) is dict:
46
+ value_type = value.get("type")
47
+ if value_type == "date":
48
+ date_string = value.get("value")
49
+ assert isinstance(date_string, str)
50
+ return datetime.date.fromisoformat(date_string)
51
+ elif value_type == "datetime":
52
+ date_string = value.get("value")
53
+ assert isinstance(date_string, str)
54
+ return datetime.datetime.fromisoformat(date_string)
55
+ return value
56
+ else:
57
+ return value
58
+
59
+
60
+ @Recorder.register_record_type
61
+ class CursorFetchAllRecord(Record):
62
+ """Implements record/replay support for the cursor.fetchall() method."""
63
+
64
+ params_cls = CursorFetchAllParams
65
+ result_cls = CursorFetchAllResult
66
+ group = "Database"
@@ -0,0 +1,23 @@
1
+ import dataclasses
2
+ from typing import Any, List
3
+
4
+ from dbt_common.record import Record, Recorder
5
+
6
+
7
+ @dataclasses.dataclass
8
+ class CursorFetchManyParams:
9
+ connection_name: str
10
+
11
+
12
+ @dataclasses.dataclass
13
+ class CursorFetchManyResult:
14
+ results: List[Any]
15
+
16
+
17
+ @Recorder.register_record_type
18
+ class CursorFetchManyRecord(Record):
19
+ """Implements record/replay support for the cursor.fetchmany() method."""
20
+
21
+ params_cls = CursorFetchManyParams
22
+ result_cls = CursorFetchManyResult
23
+ group = "Database"
@@ -0,0 +1,23 @@
1
+ import dataclasses
2
+ from typing import Any
3
+
4
+ from dbt_common.record import Record, Recorder
5
+
6
+
7
+ @dataclasses.dataclass
8
+ class CursorFetchOneParams:
9
+ connection_name: str
10
+
11
+
12
+ @dataclasses.dataclass
13
+ class CursorFetchOneResult:
14
+ result: Any
15
+
16
+
17
+ @Recorder.register_record_type
18
+ class CursorFetchOneRecord(Record):
19
+ """Implements record/replay support for the cursor.fetchone() method."""
20
+
21
+ params_cls = CursorFetchOneParams
22
+ result_cls = CursorFetchOneResult
23
+ group = "Database"
@@ -0,0 +1,23 @@
1
+ import dataclasses
2
+ from typing import Optional
3
+
4
+ from dbt_common.record import Record, Recorder
5
+
6
+
7
+ @dataclasses.dataclass
8
+ class CursorGetRowCountParams:
9
+ connection_name: str
10
+
11
+
12
+ @dataclasses.dataclass
13
+ class CursorGetRowCountResult:
14
+ rowcount: Optional[int]
15
+
16
+
17
+ @Recorder.register_record_type
18
+ class CursorGetRowCountRecord(Record):
19
+ """Implements record/replay support for the cursor.rowcount property."""
20
+
21
+ params_cls = CursorGetRowCountParams
22
+ result_cls = CursorGetRowCountResult
23
+ group = "Database"
@@ -0,0 +1,24 @@
1
+ from typing import Any
2
+
3
+ from dbt.adapters.contracts.connection import Connection
4
+
5
+ from dbt.adapters.record.cursor.cursor import RecordReplayCursor
6
+
7
+
8
+ class RecordReplayHandle:
9
+ """A proxy object used for record/replay modes. What adapters call a
10
+ 'handle' is typically a native database connection, but should not be
11
+ confused with the Connection protocol, which is a dbt-adapters concept.
12
+
13
+ Currently, the only function of the handle proxy is to provide a record/replay
14
+ aware cursor object when cursor() is called."""
15
+
16
+ def __init__(self, native_handle: Any, connection: Connection) -> None:
17
+ self.native_handle = native_handle
18
+ self.connection = connection
19
+
20
+ def cursor(self) -> Any:
21
+ # The native handle could be None if we are in replay mode, because no
22
+ # actual database access should be performed in that mode.
23
+ cursor = None if self.native_handle is None else self.native_handle.cursor()
24
+ return RecordReplayCursor(cursor, self.connection)
@@ -5,7 +5,6 @@ from typing import Any, Dict, Iterable, Iterator, List, Optional, Tuple, TYPE_CH
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
9
8
  from dbt_common.utils import cast_to_str
10
9
 
11
10
  from dbt.adapters.base import BaseConnectionManager
@@ -20,7 +19,6 @@ from dbt.adapters.events.types import (
20
19
  SQLQuery,
21
20
  SQLQueryStatus,
22
21
  )
23
- from dbt.adapters.record import QueryRecord
24
22
 
25
23
  if TYPE_CHECKING:
26
24
  import agate
@@ -143,7 +141,6 @@ class SQLConnectionManager(BaseConnectionManager):
143
141
 
144
142
  return table_from_data_flat(data, column_names)
145
143
 
146
- @record_function(QueryRecord, method=True, tuple_result=True)
147
144
  def execute(
148
145
  self,
149
146
  sql: str,
@@ -39,9 +39,12 @@
39
39
  {% set need_swap = true %}
40
40
  {% else %}
41
41
  {% do run_query(get_create_table_as_sql(True, temp_relation, sql)) %}
42
- {% do adapter.expand_target_column_types(
43
- from_relation=temp_relation,
44
- to_relation=target_relation) %}
42
+ {% set contract_config = config.get('contract') %}
43
+ {% if not contract_config or not contract_config.enforced %}
44
+ {% do adapter.expand_target_column_types(
45
+ from_relation=temp_relation,
46
+ to_relation=target_relation) %}
47
+ {% endif %}
45
48
  {#-- Process schema changes. Returns dict of changes if successful. Use source columns for upserting/merging --#}
46
49
  {% set dest_columns = process_schema_changes(on_schema_change, temp_relation, existing_relation) %}
47
50
  {% if not dest_columns %}
@@ -22,6 +22,7 @@
22
22
  {%- do default_row.update({column_name: (safe_cast("null", column_type) | trim )}) -%}
23
23
  {%- endfor -%}
24
24
 
25
+ {{ validate_fixture_rows(rows, row_number) }}
25
26
 
26
27
  {%- for row in rows -%}
27
28
  {%- set formatted_row = format_row(row, column_name_to_data_types) -%}
@@ -93,3 +94,11 @@ union all
93
94
  {%- endfor -%}
94
95
  {{ return(formatted_row) }}
95
96
  {%- endmacro -%}
97
+
98
+ {%- macro validate_fixture_rows(rows, row_number) -%}
99
+ {{ return(adapter.dispatch('validate_fixture_rows', 'dbt')(rows, row_number)) }}
100
+ {%- endmacro -%}
101
+
102
+ {%- macro default__validate_fixture_rows(rows, row_number) -%}
103
+ {# This is an abstract method for adapter overrides as needed #}
104
+ {%- endmacro -%}
@@ -12,7 +12,7 @@ maintainers = [
12
12
  { name = "dbt Labs", email = "info@dbtlabs.com" },
13
13
  ]
14
14
  classifiers = [
15
- "Development Status :: 2 - Pre-Alpha",
15
+ "Development Status :: 5 - Production/Stable",
16
16
  "License :: OSI Approved :: Apache Software License",
17
17
  "Operating System :: MacOS :: MacOS X",
18
18
  "Operating System :: Microsoft :: Windows",
@@ -24,7 +24,7 @@ classifiers = [
24
24
  "Programming Language :: Python :: 3.12",
25
25
  ]
26
26
  dependencies = [
27
- "dbt-common>=1.3,<2.0",
27
+ "dbt-common>=1.6,<2.0",
28
28
  "pytz>=2015.7",
29
29
  # installed via dbt-common but used directly
30
30
  "agate>=1.0,<2.0",
@@ -43,9 +43,6 @@ 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
-
49
46
  [tool.hatch.version]
50
47
  path = "dbt/adapters/__about__.py"
51
48
 
@@ -60,20 +57,14 @@ dependencies = [
60
57
  "dbt_common @ git+https://github.com/dbt-labs/dbt-common.git",
61
58
  'pre-commit==3.7.0;python_version>="3.9"',
62
59
  'pre-commit==3.5.0;python_version=="3.8"',
63
- ]
64
- [tool.hatch.envs.default.scripts]
65
- dev = "pre-commit install"
66
- code-quality = "pre-commit run --all-files"
67
-
68
- [tool.hatch.envs.unit-tests]
69
- dependencies = [
70
- "dbt_common @ git+https://github.com/dbt-labs/dbt-common.git",
71
60
  "pytest",
72
61
  "pytest-dotenv",
73
62
  "pytest-xdist",
74
63
  ]
75
- [tool.hatch.envs.unit-tests.scripts]
76
- all = "python -m pytest {args:tests/unit}"
64
+ [tool.hatch.envs.default.scripts]
65
+ setup = "pre-commit install"
66
+ code-quality = "pre-commit run --all-files"
67
+ unit-tests = "python -m pytest {args:tests/unit}"
77
68
 
78
69
  [tool.hatch.envs.build]
79
70
  detached = true
@@ -1 +0,0 @@
1
- version = "1.3.3"
@@ -1,67 +0,0 @@
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)
File without changes
File without changes