dbt-adapters 1.3.3__tar.gz → 1.4.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.
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/.gitignore +1 -1
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/PKG-INFO +3 -3
- dbt_adapters-1.4.0/dbt/adapters/__about__.py +1 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/base/column.py +0 -3
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/base/impl.py +24 -10
- dbt_adapters-1.4.0/dbt/adapters/record/__init__.py +2 -0
- dbt_adapters-1.4.0/dbt/adapters/record/cursor/cursor.py +54 -0
- dbt_adapters-1.4.0/dbt/adapters/record/cursor/description.py +37 -0
- dbt_adapters-1.4.0/dbt/adapters/record/cursor/execute.py +20 -0
- dbt_adapters-1.4.0/dbt/adapters/record/cursor/fetchall.py +66 -0
- dbt_adapters-1.4.0/dbt/adapters/record/cursor/fetchmany.py +23 -0
- dbt_adapters-1.4.0/dbt/adapters/record/cursor/fetchone.py +23 -0
- dbt_adapters-1.4.0/dbt/adapters/record/cursor/rowcount.py +23 -0
- dbt_adapters-1.4.0/dbt/adapters/record/handle.py +24 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/sql/connections.py +0 -3
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/models/incremental/incremental.sql +6 -3
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/unit_test_sql/get_fixture_sql.sql +9 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/pyproject.toml +6 -15
- dbt_adapters-1.3.3/dbt/adapters/__about__.py +0 -1
- dbt_adapters-1.3.3/dbt/adapters/record.py +0 -67
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/LICENSE +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/README.md +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/__init__.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/__init__.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/base/README.md +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/base/__init__.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/base/connections.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/base/meta.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/base/plugin.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/base/query_headers.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/base/relation.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/cache.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/capability.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/clients/__init__.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/clients/jinja.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/contracts/__init__.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/contracts/connection.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/contracts/macros.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/contracts/relation.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/events/README.md +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/events/__init__.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/events/adapter_types.proto +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/events/adapter_types_pb2.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/events/base_types.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/events/logging.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/events/types.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/exceptions/__init__.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/exceptions/alias.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/exceptions/cache.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/exceptions/compilation.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/exceptions/connection.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/exceptions/database.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/factory.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/protocol.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/py.typed +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/reference_keys.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/relation_configs/README.md +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/relation_configs/__init__.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/relation_configs/config_base.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/relation_configs/config_change.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/relation_configs/config_validation.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/sql/__init__.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/sql/impl.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/utils.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/__init__.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/__init__.py +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/dbt_project.yml +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/docs/overview.md +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/apply_grants.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/columns.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/freshness.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/indexes.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/metadata.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/persist_docs.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/relation.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/schema.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/show.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/timestamps.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/validate_sql.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/etc/datetime.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/etc/statement.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/generic_test_sql/accepted_values.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/generic_test_sql/not_null.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/generic_test_sql/relationships.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/generic_test_sql/unique.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/get_custom_name/get_custom_alias.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/get_custom_name/get_custom_database.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/get_custom_name/get_custom_schema.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/configs.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/hooks.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/models/clone/can_clone_table.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/models/clone/clone.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/models/clone/create_or_replace_clone.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/models/incremental/column_helpers.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/models/incremental/is_incremental.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/models/incremental/merge.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/models/incremental/on_schema_change.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/models/incremental/strategies.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/models/materialized_view.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/models/table.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/models/view.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/seeds/helpers.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/seeds/seed.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/snapshots/helpers.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/snapshots/snapshot.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/snapshots/snapshot_merge.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/snapshots/strategies.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/tests/helpers.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/tests/test.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/tests/unit.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/materializations/tests/where_subquery.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/python_model/python.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/column/columns_spec_ddl.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/create.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/create_backup.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/create_intermediate.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/drop.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/drop_backup.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/materialized_view/alter.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/materialized_view/create.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/materialized_view/drop.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/materialized_view/refresh.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/materialized_view/rename.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/materialized_view/replace.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/rename.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/rename_intermediate.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/replace.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/schema.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/table/create.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/table/drop.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/table/rename.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/table/replace.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/view/create.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/view/drop.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/view/rename.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/view/replace.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/any_value.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/array_append.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/array_concat.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/array_construct.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/bool_or.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/cast.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/cast_bool_to_text.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/concat.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/data_types.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/date.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/date_spine.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/date_trunc.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/dateadd.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/datediff.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/escape_single_quotes.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/except.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/generate_series.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/hash.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/intersect.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/last_day.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/length.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/listagg.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/literal.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/position.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/replace.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/right.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/safe_cast.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/split_part.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/tests/generic/builtin.sql +0 -0
- {dbt_adapters-1.3.3 → dbt_adapters-1.4.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.
|
|
3
|
+
Version: 1.4.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
|
|
@@ -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 ::
|
|
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.
|
|
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.0"
|
|
@@ -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
|
|
1606
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
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
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
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:
|
|
@@ -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
|
-
{%
|
|
43
|
-
|
|
44
|
-
|
|
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 ::
|
|
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.
|
|
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.
|
|
76
|
-
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/adapters/relation_configs/config_validation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/columns.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/freshness.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/indexes.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/metadata.sql
RENAMED
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/relation.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/schema.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/show.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/adapters/timestamps.sql
RENAMED
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/etc/datetime.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/etc/statement.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/python_model/python.sql
RENAMED
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/create.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/drop.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/rename.sql
RENAMED
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/replace.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/schema.sql
RENAMED
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/table/drop.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/relations/view/drop.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/any_value.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/array_append.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/array_concat.sql
RENAMED
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/bool_or.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/concat.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/data_types.sql
RENAMED
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/date_spine.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/date_trunc.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/dateadd.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/datediff.sql
RENAMED
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/except.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/intersect.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/last_day.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/length.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/listagg.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/literal.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/position.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/replace.sql
RENAMED
|
File without changes
|
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/safe_cast.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/macros/utils/split_part.sql
RENAMED
|
File without changes
|
{dbt_adapters-1.3.3 → dbt_adapters-1.4.0}/dbt/include/global_project/tests/generic/builtin.sql
RENAMED
|
File without changes
|
|
File without changes
|