From 48c48a5cdb2b2068db5fb79de27fd612c3571893 Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Mon, 24 Aug 2026 11:23:38 +0200 Subject: [PATCH 1/2] chore(clickhouse_driver): Remove transaction-based tracing --- sentry_sdk/integrations/clickhouse_driver.py | 61 +- .../test_clickhouse_driver.py | 1402 ++++++----------- 2 files changed, 457 insertions(+), 1006 deletions(-) diff --git a/sentry_sdk/integrations/clickhouse_driver.py b/sentry_sdk/integrations/clickhouse_driver.py index ddff377135..eb7fa59e93 100644 --- a/sentry_sdk/integrations/clickhouse_driver.py +++ b/sentry_sdk/integrations/clickhouse_driver.py @@ -7,8 +7,7 @@ from sentry_sdk.scope import should_send_default_pii from sentry_sdk.traces import StreamedSpan from sentry_sdk.tracing import Span -from sentry_sdk.tracing_utils import has_span_streaming_enabled -from sentry_sdk.utils import capture_internal_exceptions, has_data_collection_enabled +from sentry_sdk.utils import has_data_collection_enabled # Hack to get new Python features working in older versions # without introducing a hard dependency on `typing_extensions` @@ -81,38 +80,18 @@ def _inner(*args: "P.args", **kwargs: "P.kwargs") -> "T": connection = args[0] query = args[1] - query_id = args[2] if len(args) > 2 else kwargs.get("query_id") - params = args[3] if len(args) > 3 else kwargs.get("params") - - if has_span_streaming_enabled(client.options): - span = None - if sentry_sdk.traces.get_current_span() is not None: - span = sentry_sdk.traces.start_span( - name=query, # type: ignore - attributes={ - "sentry.op": OP.DB, - "sentry.origin": ClickhouseDriverIntegration.origin, - SPANDATA.DB_QUERY_TEXT: str(query), - }, - ) - else: - span = sentry_sdk.start_span( - op=OP.DB, - name=query, - origin=ClickhouseDriverIntegration.origin, - ) - - span.set_data("query", query) - if query_id: - span.set_data("db.query_id", query_id) + if sentry_sdk.traces.get_current_span() is None: + return f(*args, **kwargs) - if params: - if has_data_collection_enabled(client.options): - if client.options["data_collection"]["database_query_data"]: - span.set_data("db.params", params) - elif should_send_default_pii(): - span.set_data("db.params", params) + span = sentry_sdk.traces.start_span( + name=query, # type: ignore + attributes={ + "sentry.op": OP.DB, + "sentry.origin": ClickhouseDriverIntegration.origin, + SPANDATA.DB_QUERY_TEXT: str(query), + }, + ) connection._sentry_span = span # type: ignore[attr-defined] @@ -136,23 +115,7 @@ def _inner_end(*args: "P.args", **kwargs: "P.kwargs") -> "T": if span is None: return res - if isinstance(span, StreamedSpan): - span.end() - else: - if res is not None: - client_options = sentry_sdk.get_client().options - if has_data_collection_enabled(client_options): - if client_options["data_collection"]["database_query_data"]: - span.set_data("db.result", res) - elif should_send_default_pii(): - span.set_data("db.result", res) - - with capture_internal_exceptions(): - span.scope.add_breadcrumb( - message=span._data.pop("query"), category="query", data=span._data - ) - - span.finish() + span.end() return res diff --git a/tests/integrations/clickhouse_driver/test_clickhouse_driver.py b/tests/integrations/clickhouse_driver/test_clickhouse_driver.py index 1cec232548..967a11043c 100644 --- a/tests/integrations/clickhouse_driver/test_clickhouse_driver.py +++ b/tests/integrations/clickhouse_driver/test_clickhouse_driver.py @@ -8,7 +8,6 @@ from unittest import mock import clickhouse_driver -import pytest from clickhouse_driver import Client, connect import sentry_sdk @@ -733,262 +732,140 @@ def test_clickhouse_client_send_data_generator_with_data_collection_disabled( assert "db.params" not in insert_breadcrumb["data"] -@pytest.mark.parametrize("span_streaming", [True, False]) def test_clickhouse_client_spans( sentry_init, - capture_events, capture_items, - span_streaming, ): sentry_init( integrations=[ClickhouseDriverIntegration()], - trace_lifecycle="stream" if span_streaming else "static", + trace_lifecycle="stream", _experiments={ "record_sql_params": True, }, traces_sample_rate=1.0, ) - if span_streaming: - items = capture_items("span") - - trace_id = None - span_id = None - - with sentry_sdk.traces.start_span(name="custom parent") as span: - trace_id = span.trace_id - span_id = span.span_id - - client = Client("localhost") - client.execute("DROP TABLE IF EXISTS test") - client.execute("CREATE TABLE test (x Int32) ENGINE = Memory") - client.execute("INSERT INTO test (x) VALUES", [{"x": 100}]) - client.execute("INSERT INTO test (x) VALUES", [[170], [200]]) - - res = client.execute( - "SELECT sum(x) FROM test WHERE x > %(minv)i", {"minv": 150} - ) - assert res[0][0] == 370 - - sentry_sdk.flush() - spans = [item.payload for item in items] - - expected_spans = [ - { - "name": "DROP TABLE IF EXISTS test", - "attributes": { - "db.system.name": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.namespace": "", - "db.user": "default", - "sentry.op": "db", - "db.query.text": "DROP TABLE IF EXISTS test", - "sentry.origin": "auto.db.clickhouse_driver", - "server.address": "localhost", - "server.port": 9000, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "CREATE TABLE test (x Int32) ENGINE = Memory", - "attributes": { - "db.system.name": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.namespace": "", - "db.user": "default", - "sentry.op": "db", - "db.query.text": "CREATE TABLE test (x Int32) ENGINE = Memory", - "sentry.origin": "auto.db.clickhouse_driver", - "server.address": "localhost", - "server.port": 9000, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "INSERT INTO test (x) VALUES", - "attributes": { - "db.system.name": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.namespace": "", - "db.user": "default", - "sentry.op": "db", - "db.query.text": "INSERT INTO test (x) VALUES", - "sentry.origin": "auto.db.clickhouse_driver", - "server.address": "localhost", - "server.port": 9000, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "INSERT INTO test (x) VALUES", - "attributes": { - "db.system.name": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.namespace": "", - "db.user": "default", - "sentry.op": "db", - "db.query.text": "INSERT INTO test (x) VALUES", - "sentry.origin": "auto.db.clickhouse_driver", - "server.address": "localhost", - "server.port": 9000, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "SELECT sum(x) FROM test WHERE x > 150", - "attributes": { - "db.system.name": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.namespace": "", - "db.user": "default", - "sentry.op": "db", - "db.query.text": "SELECT sum(x) FROM test WHERE x > 150", - "sentry.origin": "auto.db.clickhouse_driver", - "server.address": "localhost", - "server.port": 9000, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "custom parent", - "attributes": [], - "trace_id": trace_id, - }, - ] - - for span in expected_spans: - span["attributes"] = ApproxDict(span["attributes"]) - - for span in spans: - span.pop("span_id", None) - span.pop("start_timestamp", None) - span.pop("end_timestamp", None) - span.pop("is_segment", None) - span.pop("status", None) - - assert spans == expected_spans - else: - events = capture_events() - - transaction_trace_id = None - transaction_span_id = None - - with start_transaction(name="test_clickhouse_transaction") as transaction: - transaction_trace_id = transaction.trace_id - transaction_span_id = transaction.span_id - - client = Client("localhost") - client.execute("DROP TABLE IF EXISTS test") - client.execute("CREATE TABLE test (x Int32) ENGINE = Memory") - client.execute("INSERT INTO test (x) VALUES", [{"x": 100}]) - client.execute("INSERT INTO test (x) VALUES", [[170], [200]]) - - res = client.execute( - "SELECT sum(x) FROM test WHERE x > %(minv)i", {"minv": 150} - ) - assert res[0][0] == 370 - - (event,) = events - - expected_spans = [ - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "DROP TABLE IF EXISTS test", - "data": { - "db.system": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + items = capture_items("span") + + trace_id = None + span_id = None + + with sentry_sdk.traces.start_span(name="custom parent") as span: + trace_id = span.trace_id + span_id = span.span_id + + client = Client("localhost") + client.execute("DROP TABLE IF EXISTS test") + client.execute("CREATE TABLE test (x Int32) ENGINE = Memory") + client.execute("INSERT INTO test (x) VALUES", [{"x": 100}]) + client.execute("INSERT INTO test (x) VALUES", [[170], [200]]) + + res = client.execute( + "SELECT sum(x) FROM test WHERE x > %(minv)i", {"minv": 150} + ) + assert res[0][0] == 370 + + sentry_sdk.flush() + spans = [item.payload for item in items] + + expected_spans = [ + { + "name": "DROP TABLE IF EXISTS test", + "attributes": { + "db.system.name": "clickhouse", + "db.driver.name": "clickhouse-driver", + "db.namespace": "", + "db.user": "default", + "sentry.op": "db", + "db.query.text": "DROP TABLE IF EXISTS test", + "sentry.origin": "auto.db.clickhouse_driver", + "server.address": "localhost", + "server.port": 9000, }, - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "CREATE TABLE test (x Int32) ENGINE = Memory", - "data": { - "db.system": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "CREATE TABLE test (x Int32) ENGINE = Memory", + "attributes": { + "db.system.name": "clickhouse", + "db.driver.name": "clickhouse-driver", + "db.namespace": "", + "db.user": "default", + "sentry.op": "db", + "db.query.text": "CREATE TABLE test (x Int32) ENGINE = Memory", + "sentry.origin": "auto.db.clickhouse_driver", + "server.address": "localhost", + "server.port": 9000, }, - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "INSERT INTO test (x) VALUES", - "data": { - "db.system": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "INSERT INTO test (x) VALUES", + "attributes": { + "db.system.name": "clickhouse", + "db.driver.name": "clickhouse-driver", + "db.namespace": "", + "db.user": "default", + "sentry.op": "db", + "db.query.text": "INSERT INTO test (x) VALUES", + "sentry.origin": "auto.db.clickhouse_driver", + "server.address": "localhost", + "server.port": 9000, }, - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "INSERT INTO test (x) VALUES", - "data": { - "db.system": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "INSERT INTO test (x) VALUES", + "attributes": { + "db.system.name": "clickhouse", + "db.driver.name": "clickhouse-driver", + "db.namespace": "", + "db.user": "default", + "sentry.op": "db", + "db.query.text": "INSERT INTO test (x) VALUES", + "sentry.origin": "auto.db.clickhouse_driver", + "server.address": "localhost", + "server.port": 9000, }, - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "SELECT sum(x) FROM test WHERE x > 150", - "data": { - "db.system": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "SELECT sum(x) FROM test WHERE x > 150", + "attributes": { + "db.system.name": "clickhouse", + "db.driver.name": "clickhouse-driver", + "db.namespace": "", + "db.user": "default", + "sentry.op": "db", + "db.query.text": "SELECT sum(x) FROM test WHERE x > 150", + "sentry.origin": "auto.db.clickhouse_driver", + "server.address": "localhost", + "server.port": 9000, }, - ] - - if not EXPECT_PARAMS_IN_SELECT: - expected_spans[-1]["data"].pop("db.params", None) + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "custom parent", + "attributes": [], + "trace_id": trace_id, + }, + ] - for span in expected_spans: - span["data"] = ApproxDict(span["data"]) + for span in expected_spans: + span["attributes"] = ApproxDict(span["attributes"]) - for span in event["spans"]: - span.pop("span_id", None) - span.pop("start_timestamp", None) - span.pop("timestamp", None) + for span in spans: + span.pop("span_id", None) + span.pop("start_timestamp", None) + span.pop("end_timestamp", None) + span.pop("is_segment", None) + span.pop("status", None) - assert event["spans"] == expected_spans + assert spans == expected_spans def test_clickhouse_spans_with_generator(sentry_init, capture_events): @@ -1023,256 +900,132 @@ def test_clickhouse_spans_with_generator(sentry_init, capture_events): assert span["data"]["db.params"] == [{"x": 0}, {"x": 1}, {"x": 2}] -@pytest.mark.parametrize("span_streaming", [True, False]) def test_clickhouse_client_spans_with_pii( sentry_init, - capture_events, capture_items, - capture_envelopes, - span_streaming, ): sentry_init( integrations=[ClickhouseDriverIntegration()], - trace_lifecycle="stream" if span_streaming else "static", + trace_lifecycle="stream", _experiments={ "record_sql_params": True, }, traces_sample_rate=1.0, send_default_pii=True, ) - if span_streaming: - items = capture_items("span") - - trace_id = None - span_id = None - - with sentry_sdk.traces.start_span(name="custom parent") as span: - trace_id = span.trace_id - span_id = span.span_id - - client = Client("localhost") - client.execute("DROP TABLE IF EXISTS test") - client.execute("CREATE TABLE test (x Int32) ENGINE = Memory") - client.execute("INSERT INTO test (x) VALUES", [{"x": 100}]) - client.execute("INSERT INTO test (x) VALUES", [[170], [200]]) - - res = client.execute( - "SELECT sum(x) FROM test WHERE x > %(minv)i", {"minv": 150} - ) - assert res[0][0] == 370 - - sentry_sdk.flush() - spans = [item.payload for item in items] - - expected_spans = [ - { - "name": "DROP TABLE IF EXISTS test", - "attributes": { - "db.system.name": "clickhouse", - "db.namespace": "", - "db.user": "default", - "db.query.text": "DROP TABLE IF EXISTS test", - "server.address": "localhost", - "server.port": 9000, - "thread.id": mock.ANY, - "thread.name": mock.ANY, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "CREATE TABLE test (x Int32) ENGINE = Memory", - "attributes": { - "db.system.name": "clickhouse", - "db.namespace": "", - "db.user": "default", - "db.query.text": "CREATE TABLE test (x Int32) ENGINE = Memory", - "server.address": "localhost", - "server.port": 9000, - "thread.id": mock.ANY, - "thread.name": mock.ANY, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "INSERT INTO test (x) VALUES", - "attributes": { - "db.system.name": "clickhouse", - "db.namespace": "", - "db.user": "default", - "db.query.text": "INSERT INTO test (x) VALUES", - "server.address": "localhost", - "server.port": 9000, - "thread.id": mock.ANY, - "thread.name": mock.ANY, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "INSERT INTO test (x) VALUES", - "attributes": { - "db.system.name": "clickhouse", - "db.namespace": "", - "db.user": "default", - "db.query.text": "INSERT INTO test (x) VALUES", - "server.address": "localhost", - "server.port": 9000, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "SELECT sum(x) FROM test WHERE x > 150", - "attributes": { - "db.system.name": "clickhouse", - "db.namespace": "", - "db.user": "default", - "db.query.text": "SELECT sum(x) FROM test WHERE x > 150", - "server.address": "localhost", - "server.port": 9000, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "custom parent", - "attributes": [], - "trace_id": trace_id, - }, - ] - - for span in expected_spans: - span["attributes"] = ApproxDict(span["attributes"]) - - for span in spans: - span.pop("span_id", None) - span.pop("start_timestamp", None) - span.pop("end_timestamp", None) - span.pop("is_segment", None) - span.pop("status", None) - - assert spans == expected_spans - else: - events = capture_events() - - transaction_trace_id = None - transaction_span_id = None - - with start_transaction(name="test_clickhouse_transaction") as transaction: - transaction_trace_id = transaction.trace_id - transaction_span_id = transaction.span_id - - client = Client("localhost") - client.execute("DROP TABLE IF EXISTS test") - client.execute("CREATE TABLE test (x Int32) ENGINE = Memory") - client.execute("INSERT INTO test (x) VALUES", [{"x": 100}]) - client.execute("INSERT INTO test (x) VALUES", [[170], [200]]) - - res = client.execute( - "SELECT sum(x) FROM test WHERE x > %(minv)i", {"minv": 150} - ) - assert res[0][0] == 370 - - (event,) = events - - expected_spans = [ - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "DROP TABLE IF EXISTS test", - "data": { - "db.system": "clickhouse", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - "db.result": [], - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + items = capture_items("span") + + trace_id = None + span_id = None + + with sentry_sdk.traces.start_span(name="custom parent") as span: + trace_id = span.trace_id + span_id = span.span_id + + client = Client("localhost") + client.execute("DROP TABLE IF EXISTS test") + client.execute("CREATE TABLE test (x Int32) ENGINE = Memory") + client.execute("INSERT INTO test (x) VALUES", [{"x": 100}]) + client.execute("INSERT INTO test (x) VALUES", [[170], [200]]) + + res = client.execute( + "SELECT sum(x) FROM test WHERE x > %(minv)i", {"minv": 150} + ) + assert res[0][0] == 370 + + sentry_sdk.flush() + spans = [item.payload for item in items] + + expected_spans = [ + { + "name": "DROP TABLE IF EXISTS test", + "attributes": { + "db.system.name": "clickhouse", + "db.namespace": "", + "db.user": "default", + "db.query.text": "DROP TABLE IF EXISTS test", + "server.address": "localhost", + "server.port": 9000, + "thread.id": mock.ANY, + "thread.name": mock.ANY, }, - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "CREATE TABLE test (x Int32) ENGINE = Memory", - "data": { - "db.system": "clickhouse", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - "db.result": [], - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "CREATE TABLE test (x Int32) ENGINE = Memory", + "attributes": { + "db.system.name": "clickhouse", + "db.namespace": "", + "db.user": "default", + "db.query.text": "CREATE TABLE test (x Int32) ENGINE = Memory", + "server.address": "localhost", + "server.port": 9000, + "thread.id": mock.ANY, + "thread.name": mock.ANY, }, - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "INSERT INTO test (x) VALUES", - "data": { - "db.system": "clickhouse", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - "db.params": [{"x": 100}], - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "INSERT INTO test (x) VALUES", + "attributes": { + "db.system.name": "clickhouse", + "db.namespace": "", + "db.user": "default", + "db.query.text": "INSERT INTO test (x) VALUES", + "server.address": "localhost", + "server.port": 9000, + "thread.id": mock.ANY, + "thread.name": mock.ANY, }, - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "INSERT INTO test (x) VALUES", - "data": { - "db.system": "clickhouse", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - "db.params": [[170], [200]], - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "INSERT INTO test (x) VALUES", + "attributes": { + "db.system.name": "clickhouse", + "db.namespace": "", + "db.user": "default", + "db.query.text": "INSERT INTO test (x) VALUES", + "server.address": "localhost", + "server.port": 9000, }, - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "SELECT sum(x) FROM test WHERE x > 150", - "data": { - "db.system": "clickhouse", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - "db.params": {"minv": 150}, - "db.result": [[370]], - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "SELECT sum(x) FROM test WHERE x > 150", + "attributes": { + "db.system.name": "clickhouse", + "db.namespace": "", + "db.user": "default", + "db.query.text": "SELECT sum(x) FROM test WHERE x > 150", + "server.address": "localhost", + "server.port": 9000, }, - ] - - if not EXPECT_PARAMS_IN_SELECT: - expected_spans[-1]["data"].pop("db.params", None) + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "custom parent", + "attributes": [], + "trace_id": trace_id, + }, + ] - for span in expected_spans: - span["data"] = ApproxDict(span["data"]) + for span in expected_spans: + span["attributes"] = ApproxDict(span["attributes"]) - for span in event["spans"]: - span.pop("span_id", None) - span.pop("start_timestamp", None) - span.pop("timestamp", None) + for span in spans: + span.pop("span_id", None) + span.pop("start_timestamp", None) + span.pop("end_timestamp", None) + span.pop("is_segment", None) + span.pop("status", None) - assert event["spans"] == expected_spans + assert spans == expected_spans def test_clickhouse_dbapi_breadcrumbs(sentry_init, capture_events) -> None: @@ -1479,554 +1232,289 @@ def test_clickhouse_dbapi_breadcrumbs_with_pii(sentry_init, capture_events) -> N assert event["breadcrumbs"]["values"] == expected_breadcrumbs -@pytest.mark.parametrize("span_streaming", [True, False]) def test_clickhouse_dbapi_spans( sentry_init, - capture_events, capture_items, - capture_envelopes, - span_streaming, ): sentry_init( integrations=[ClickhouseDriverIntegration()], - trace_lifecycle="stream" if span_streaming else "static", + trace_lifecycle="stream", _experiments={ "record_sql_params": True, }, traces_sample_rate=1.0, ) - if span_streaming: - items = capture_items("span") - - trace_id = None - span_id = None - - with sentry_sdk.traces.start_span(name="custom parent") as span: - trace_id = span.trace_id - span_id = span.span_id - - conn = connect("clickhouse://localhost") - cursor = conn.cursor() - cursor.execute("DROP TABLE IF EXISTS test") - cursor.execute("CREATE TABLE test (x Int32) ENGINE = Memory") - cursor.executemany("INSERT INTO test (x) VALUES", [{"x": 100}]) - cursor.executemany("INSERT INTO test (x) VALUES", [[170], [200]]) - cursor.execute("SELECT sum(x) FROM test WHERE x > %(minv)i", {"minv": 150}) - res = cursor.fetchall() - - sentry_sdk.flush() - spans = [item.payload for item in items] - - expected_spans = [ - { - "name": "DROP TABLE IF EXISTS test", - "attributes": { - "db.system.name": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.namespace": "", - "db.user": "default", - "db.query.text": "DROP TABLE IF EXISTS test", - "sentry.op": "db", - "sentry.origin": "auto.db.clickhouse_driver", - "server.address": "localhost", - "server.port": 9000, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "CREATE TABLE test (x Int32) ENGINE = Memory", - "attributes": { - "db.system.name": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.namespace": "", - "db.user": "default", - "db.query.text": "CREATE TABLE test (x Int32) ENGINE = Memory", - "sentry.op": "db", - "sentry.origin": "auto.db.clickhouse_driver", - "server.address": "localhost", - "server.port": 9000, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "INSERT INTO test (x) VALUES", - "attributes": { - "db.system.name": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.namespace": "", - "db.user": "default", - "db.query.text": "INSERT INTO test (x) VALUES", - "sentry.op": "db", - "sentry.origin": "auto.db.clickhouse_driver", - "server.address": "localhost", - "server.port": 9000, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "INSERT INTO test (x) VALUES", - "attributes": { - "db.system.name": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.namespace": "", - "db.user": "default", - "db.query.text": "INSERT INTO test (x) VALUES", - "sentry.op": "db", - "sentry.origin": "auto.db.clickhouse_driver", - "server.address": "localhost", - "server.port": 9000, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "SELECT sum(x) FROM test WHERE x > 150", - "attributes": { - "db.system.name": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.namespace": "", - "db.user": "default", - "db.query.text": "SELECT sum(x) FROM test WHERE x > 150", - "sentry.op": "db", - "sentry.origin": "auto.db.clickhouse_driver", - "server.address": "localhost", - "server.port": 9000, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "custom parent", - "attributes": [], - "trace_id": trace_id, - }, - ] - - for span in expected_spans: - span["attributes"] = ApproxDict(span["attributes"]) - - for span in spans: - span.pop("span_id", None) - span.pop("start_timestamp", None) - span.pop("end_timestamp", None) - span.pop("is_segment", None) - span.pop("status", None) - - assert spans == expected_spans - else: - events = capture_events() - - transaction_trace_id = None - transaction_span_id = None - - with start_transaction(name="test_clickhouse_transaction") as transaction: - transaction_trace_id = transaction.trace_id - transaction_span_id = transaction.span_id - - conn = connect("clickhouse://localhost") - cursor = conn.cursor() - cursor.execute("DROP TABLE IF EXISTS test") - cursor.execute("CREATE TABLE test (x Int32) ENGINE = Memory") - cursor.executemany("INSERT INTO test (x) VALUES", [{"x": 100}]) - cursor.executemany("INSERT INTO test (x) VALUES", [[170], [200]]) - cursor.execute("SELECT sum(x) FROM test WHERE x > %(minv)i", {"minv": 150}) - res = cursor.fetchall() + items = capture_items("span") - assert res[0][0] == 370 + trace_id = None + span_id = None + + with sentry_sdk.traces.start_span(name="custom parent") as span: + trace_id = span.trace_id + span_id = span.span_id - (event,) = events - - expected_spans = [ - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "DROP TABLE IF EXISTS test", - "data": { - "db.system": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + conn = connect("clickhouse://localhost") + cursor = conn.cursor() + cursor.execute("DROP TABLE IF EXISTS test") + cursor.execute("CREATE TABLE test (x Int32) ENGINE = Memory") + cursor.executemany("INSERT INTO test (x) VALUES", [{"x": 100}]) + cursor.executemany("INSERT INTO test (x) VALUES", [[170], [200]]) + cursor.execute("SELECT sum(x) FROM test WHERE x > %(minv)i", {"minv": 150}) + + sentry_sdk.flush() + spans = [item.payload for item in items] + + expected_spans = [ + { + "name": "DROP TABLE IF EXISTS test", + "attributes": { + "db.system.name": "clickhouse", + "db.driver.name": "clickhouse-driver", + "db.namespace": "", + "db.user": "default", + "db.query.text": "DROP TABLE IF EXISTS test", + "sentry.op": "db", + "sentry.origin": "auto.db.clickhouse_driver", + "server.address": "localhost", + "server.port": 9000, }, - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "CREATE TABLE test (x Int32) ENGINE = Memory", - "data": { - "db.system": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "CREATE TABLE test (x Int32) ENGINE = Memory", + "attributes": { + "db.system.name": "clickhouse", + "db.driver.name": "clickhouse-driver", + "db.namespace": "", + "db.user": "default", + "db.query.text": "CREATE TABLE test (x Int32) ENGINE = Memory", + "sentry.op": "db", + "sentry.origin": "auto.db.clickhouse_driver", + "server.address": "localhost", + "server.port": 9000, }, - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "INSERT INTO test (x) VALUES", - "data": { - "db.system": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "INSERT INTO test (x) VALUES", + "attributes": { + "db.system.name": "clickhouse", + "db.driver.name": "clickhouse-driver", + "db.namespace": "", + "db.user": "default", + "db.query.text": "INSERT INTO test (x) VALUES", + "sentry.op": "db", + "sentry.origin": "auto.db.clickhouse_driver", + "server.address": "localhost", + "server.port": 9000, }, - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "INSERT INTO test (x) VALUES", - "data": { - "db.system": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "INSERT INTO test (x) VALUES", + "attributes": { + "db.system.name": "clickhouse", + "db.driver.name": "clickhouse-driver", + "db.namespace": "", + "db.user": "default", + "db.query.text": "INSERT INTO test (x) VALUES", + "sentry.op": "db", + "sentry.origin": "auto.db.clickhouse_driver", + "server.address": "localhost", + "server.port": 9000, }, - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "SELECT sum(x) FROM test WHERE x > 150", - "data": { - "db.system": "clickhouse", - "db.driver.name": "clickhouse-driver", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "SELECT sum(x) FROM test WHERE x > 150", + "attributes": { + "db.system.name": "clickhouse", + "db.driver.name": "clickhouse-driver", + "db.namespace": "", + "db.user": "default", + "db.query.text": "SELECT sum(x) FROM test WHERE x > 150", + "sentry.op": "db", + "sentry.origin": "auto.db.clickhouse_driver", + "server.address": "localhost", + "server.port": 9000, }, - ] - - if not EXPECT_PARAMS_IN_SELECT: - expected_spans[-1]["data"].pop("db.params", None) + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "custom parent", + "attributes": [], + "trace_id": trace_id, + }, + ] - for span in expected_spans: - span["data"] = ApproxDict(span["data"]) + for span in expected_spans: + span["attributes"] = ApproxDict(span["attributes"]) - for span in event["spans"]: - span.pop("span_id", None) - span.pop("start_timestamp", None) - span.pop("timestamp", None) + for span in spans: + span.pop("span_id", None) + span.pop("start_timestamp", None) + span.pop("end_timestamp", None) + span.pop("is_segment", None) + span.pop("status", None) - assert event["spans"] == expected_spans + assert spans == expected_spans -@pytest.mark.parametrize("span_streaming", [True, False]) def test_clickhouse_dbapi_spans_with_pii( sentry_init, - capture_events, capture_items, - capture_envelopes, - span_streaming, ): sentry_init( integrations=[ClickhouseDriverIntegration()], - trace_lifecycle="stream" if span_streaming else "static", + trace_lifecycle="stream", _experiments={ "record_sql_params": True, }, traces_sample_rate=1.0, send_default_pii=True, ) - if span_streaming: - items = capture_items("span") - - trace_id = None - span_id = None + items = capture_items("span") - with sentry_sdk.traces.start_span(name="custom parent") as span: - trace_id = span.trace_id - span_id = span.span_id + trace_id = None + span_id = None - conn = connect("clickhouse://localhost") - cursor = conn.cursor() - cursor.execute("DROP TABLE IF EXISTS test") - cursor.execute("CREATE TABLE test (x Int32) ENGINE = Memory") - cursor.executemany("INSERT INTO test (x) VALUES", [{"x": 100}]) - cursor.executemany("INSERT INTO test (x) VALUES", [[170], [200]]) - cursor.execute("SELECT sum(x) FROM test WHERE x > %(minv)i", {"minv": 150}) - res = cursor.fetchall() + with sentry_sdk.traces.start_span(name="custom parent") as span: + trace_id = span.trace_id + span_id = span.span_id - assert res[0][0] == 370 + conn = connect("clickhouse://localhost") + cursor = conn.cursor() + cursor.execute("DROP TABLE IF EXISTS test") + cursor.execute("CREATE TABLE test (x Int32) ENGINE = Memory") + cursor.executemany("INSERT INTO test (x) VALUES", [{"x": 100}]) + cursor.executemany("INSERT INTO test (x) VALUES", [[170], [200]]) + cursor.execute("SELECT sum(x) FROM test WHERE x > %(minv)i", {"minv": 150}) + res = cursor.fetchall() - sentry_sdk.flush() - spans = [item.payload for item in items] - - expected_spans = [ - { - "name": "DROP TABLE IF EXISTS test", - "attributes": { - "db.system.name": "clickhouse", - "db.namespace": "", - "db.user": "default", - "db.query.text": "DROP TABLE IF EXISTS test", - "sentry.op": "db", - "sentry.origin": "auto.db.clickhouse_driver", - "server.address": "localhost", - "server.port": 9000, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "CREATE TABLE test (x Int32) ENGINE = Memory", - "attributes": { - "db.system.name": "clickhouse", - "db.namespace": "", - "db.user": "default", - "db.query.text": "CREATE TABLE test (x Int32) ENGINE = Memory", - "sentry.op": "db", - "sentry.origin": "auto.db.clickhouse_driver", - "server.address": "localhost", - "server.port": 9000, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "INSERT INTO test (x) VALUES", - "attributes": { - "db.system.name": "clickhouse", - "db.namespace": "", - "db.user": "default", - "db.query.text": "INSERT INTO test (x) VALUES", - "sentry.op": "db", - "sentry.origin": "auto.db.clickhouse_driver", - "server.address": "localhost", - "server.port": 9000, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "INSERT INTO test (x) VALUES", - "attributes": { - "db.system.name": "clickhouse", - "db.namespace": "", - "db.user": "default", - "db.query.text": "INSERT INTO test (x) VALUES", - "sentry.op": "db", - "sentry.origin": "auto.db.clickhouse_driver", - "server.address": "localhost", - "server.port": 9000, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "SELECT sum(x) FROM test WHERE x > 150", - "attributes": { - "db.system.name": "clickhouse", - "db.namespace": "", - "db.user": "default", - "db.query.text": "SELECT sum(x) FROM test WHERE x > 150", - "sentry.op": "db", - "sentry.origin": "auto.db.clickhouse_driver", - "server.address": "localhost", - "server.port": 9000, - }, - "trace_id": trace_id, - "parent_span_id": span_id, - }, - { - "name": "custom parent", - "attributes": [], - "trace_id": trace_id, - }, - ] - - for span in expected_spans: - span["attributes"] = ApproxDict(span["attributes"]) - - for span in spans: - span.pop("span_id", None) - span.pop("start_timestamp", None) - span.pop("end_timestamp", None) - span.pop("is_segment", None) - span.pop("status", None) - - assert spans == expected_spans - else: - events = capture_events() - - transaction_trace_id = None - transaction_span_id = None - - with start_transaction(name="test_clickhouse_transaction") as transaction: - transaction_trace_id = transaction.trace_id - transaction_span_id = transaction.span_id - - conn = connect("clickhouse://localhost") - cursor = conn.cursor() - cursor.execute("DROP TABLE IF EXISTS test") - cursor.execute("CREATE TABLE test (x Int32) ENGINE = Memory") - cursor.executemany("INSERT INTO test (x) VALUES", [{"x": 100}]) - cursor.executemany("INSERT INTO test (x) VALUES", [[170], [200]]) - cursor.execute("SELECT sum(x) FROM test WHERE x > %(minv)i", {"minv": 150}) - res = cursor.fetchall() + assert res[0][0] == 370 - assert res[0][0] == 370 + sentry_sdk.flush() + spans = [item.payload for item in items] - (event,) = events - - expected_spans = [ - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "DROP TABLE IF EXISTS test", - "data": { - "db.system": "clickhouse", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - "db.result": [[], []], - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + expected_spans = [ + { + "name": "DROP TABLE IF EXISTS test", + "attributes": { + "db.system.name": "clickhouse", + "db.namespace": "", + "db.user": "default", + "db.query.text": "DROP TABLE IF EXISTS test", + "sentry.op": "db", + "sentry.origin": "auto.db.clickhouse_driver", + "server.address": "localhost", + "server.port": 9000, }, - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "CREATE TABLE test (x Int32) ENGINE = Memory", - "data": { - "db.system": "clickhouse", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - "db.result": [[], []], - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "CREATE TABLE test (x Int32) ENGINE = Memory", + "attributes": { + "db.system.name": "clickhouse", + "db.namespace": "", + "db.user": "default", + "db.query.text": "CREATE TABLE test (x Int32) ENGINE = Memory", + "sentry.op": "db", + "sentry.origin": "auto.db.clickhouse_driver", + "server.address": "localhost", + "server.port": 9000, }, - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "INSERT INTO test (x) VALUES", - "data": { - "db.system": "clickhouse", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - "db.params": [{"x": 100}], - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "INSERT INTO test (x) VALUES", + "attributes": { + "db.system.name": "clickhouse", + "db.namespace": "", + "db.user": "default", + "db.query.text": "INSERT INTO test (x) VALUES", + "sentry.op": "db", + "sentry.origin": "auto.db.clickhouse_driver", + "server.address": "localhost", + "server.port": 9000, }, - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "INSERT INTO test (x) VALUES", - "data": { - "db.system": "clickhouse", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - "db.params": [[170], [200]], - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "INSERT INTO test (x) VALUES", + "attributes": { + "db.system.name": "clickhouse", + "db.namespace": "", + "db.user": "default", + "db.query.text": "INSERT INTO test (x) VALUES", + "sentry.op": "db", + "sentry.origin": "auto.db.clickhouse_driver", + "server.address": "localhost", + "server.port": 9000, }, - { - "op": "db", - "origin": "auto.db.clickhouse_driver", - "description": "SELECT sum(x) FROM test WHERE x > 150", - "data": { - "db.system": "clickhouse", - "db.name": "", - "db.user": "default", - "server.address": "localhost", - "server.port": 9000, - "db.params": {"minv": 150}, - "db.result": [[[370]], [["sum(x)", "Int64"]]], - }, - "same_process_as_parent": True, - "trace_id": transaction_trace_id, - "parent_span_id": transaction_span_id, + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "SELECT sum(x) FROM test WHERE x > 150", + "attributes": { + "db.system.name": "clickhouse", + "db.namespace": "", + "db.user": "default", + "db.query.text": "SELECT sum(x) FROM test WHERE x > 150", + "sentry.op": "db", + "sentry.origin": "auto.db.clickhouse_driver", + "server.address": "localhost", + "server.port": 9000, }, - ] - - if not EXPECT_PARAMS_IN_SELECT: - expected_spans[-1]["data"].pop("db.params", None) + "trace_id": trace_id, + "parent_span_id": span_id, + }, + { + "name": "custom parent", + "attributes": [], + "trace_id": trace_id, + }, + ] - for span in expected_spans: - span["data"] = ApproxDict(span["data"]) + for span in expected_spans: + span["attributes"] = ApproxDict(span["attributes"]) - for span in event["spans"]: - span.pop("span_id", None) - span.pop("start_timestamp", None) - span.pop("timestamp", None) + for span in spans: + span.pop("span_id", None) + span.pop("start_timestamp", None) + span.pop("end_timestamp", None) + span.pop("is_segment", None) + span.pop("status", None) - assert event["spans"] == expected_spans + assert spans == expected_spans -@pytest.mark.parametrize("span_streaming", [True, False]) def test_span_origin( sentry_init, - capture_events, capture_items, - capture_envelopes, - span_streaming, ): sentry_init( integrations=[ClickhouseDriverIntegration()], traces_sample_rate=1.0, - trace_lifecycle="stream" if span_streaming else "static", + trace_lifecycle="stream", ) - if span_streaming: - items = capture_items("span") - - with sentry_sdk.traces.start_span(name="custom parent"): - conn = connect("clickhouse://localhost") - cursor = conn.cursor() - cursor.execute("SELECT 1") - - sentry_sdk.flush() - spans = [item.payload for item in items] - - assert spans[1]["attributes"]["sentry.origin"] == "manual" - assert spans[0]["attributes"]["sentry.origin"] == "auto.db.clickhouse_driver" - else: - events = capture_events() + items = capture_items("span") - with start_transaction(name="test_clickhouse_transaction"): - conn = connect("clickhouse://localhost") - cursor = conn.cursor() - cursor.execute("SELECT 1") + with sentry_sdk.traces.start_span(name="custom parent"): + conn = connect("clickhouse://localhost") + cursor = conn.cursor() + cursor.execute("SELECT 1") - (event,) = events + sentry_sdk.flush() + spans = [item.payload for item in items] - assert event["contexts"]["trace"]["origin"] == "manual" - assert event["spans"][0]["origin"] == "auto.db.clickhouse_driver" + assert spans[1]["attributes"]["sentry.origin"] == "manual" + assert spans[0]["attributes"]["sentry.origin"] == "auto.db.clickhouse_driver" From d88ce9f0f4abb8e9b73b385ee25860b150a1ce93 Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Mon, 24 Aug 2026 11:26:57 +0200 Subject: [PATCH 2/2] remove test_clickhouse_spans_with_generator --- .../test_clickhouse_driver.py | 34 +------------------ 1 file changed, 1 insertion(+), 33 deletions(-) diff --git a/tests/integrations/clickhouse_driver/test_clickhouse_driver.py b/tests/integrations/clickhouse_driver/test_clickhouse_driver.py index 967a11043c..52e34e7956 100644 --- a/tests/integrations/clickhouse_driver/test_clickhouse_driver.py +++ b/tests/integrations/clickhouse_driver/test_clickhouse_driver.py @@ -11,7 +11,7 @@ from clickhouse_driver import Client, connect import sentry_sdk -from sentry_sdk import capture_message, start_transaction +from sentry_sdk import capture_message from sentry_sdk.integrations.clickhouse_driver import ClickhouseDriverIntegration from tests.conftest import ApproxDict @@ -868,38 +868,6 @@ def test_clickhouse_client_spans( assert spans == expected_spans -def test_clickhouse_spans_with_generator(sentry_init, capture_events): - sentry_init( - integrations=[ClickhouseDriverIntegration()], - send_default_pii=True, - traces_sample_rate=1.0, - ) - events = capture_events() - - # Use a generator to test that the integration obtains values from the generator, - # without consuming the generator. - values = ({"x": i} for i in range(3)) - - with start_transaction(name="test_clickhouse_transaction"): - client = Client("localhost") - client.execute("DROP TABLE IF EXISTS test") - client.execute("CREATE TABLE test (x Int32) ENGINE = Memory") - client.execute("INSERT INTO test (x) VALUES", values) - res = client.execute("SELECT x FROM test") - - # Verify that the integration did not consume the generator - assert res == [(0,), (1,), (2,)] - - (event,) = events - spans = event["spans"] - - [span] = [ - span for span in spans if span["description"] == "INSERT INTO test (x) VALUES" - ] - - assert span["data"]["db.params"] == [{"x": 0}, {"x": 1}, {"x": 2}] - - def test_clickhouse_client_spans_with_pii( sentry_init, capture_items,