17
17
18
18
import pytest
19
19
import sqlalchemy
20
- from sqlalchemy import create_engine
20
+ from sqlalchemy import (
21
+ create_engine ,
22
+ text ,
23
+ )
21
24
22
25
from opentelemetry import trace
23
26
from opentelemetry .instrumentation .sqlalchemy import SQLAlchemyInstrumentor
@@ -43,12 +46,14 @@ def test_trace_integration(self):
43
46
tracer_provider = self .tracer_provider ,
44
47
)
45
48
cnx = engine .connect ()
46
- cnx .execute ("SELECT 1 + 1;" ).fetchall ()
47
- cnx .execute ("/* leading comment */ SELECT 1 + 1;" ).fetchall ()
49
+ cnx .execute (text ( "SELECT 1 + 1;" ) ).fetchall ()
50
+ cnx .execute (text ( "/* leading comment */ SELECT 1 + 1;" ) ).fetchall ()
48
51
cnx .execute (
49
- "/* leading comment */ SELECT 1 + 1; /* trailing comment */"
52
+ text (
53
+ "/* leading comment */ SELECT 1 + 1; /* trailing comment */"
54
+ )
50
55
).fetchall ()
51
- cnx .execute ("SELECT 1 + 1; /* trailing comment */" ).fetchall ()
56
+ cnx .execute (text ( "SELECT 1 + 1; /* trailing comment */" ) ).fetchall ()
52
57
spans = self .memory_exporter .get_finished_spans ()
53
58
54
59
self .assertEqual (len (spans ), 5 )
@@ -76,9 +81,9 @@ def test_instrument_two_engines(self):
76
81
)
77
82
78
83
cnx_1 = engine_1 .connect ()
79
- cnx_1 .execute ("SELECT 1 + 1;" ).fetchall ()
84
+ cnx_1 .execute (text ( "SELECT 1 + 1;" ) ).fetchall ()
80
85
cnx_2 = engine_2 .connect ()
81
- cnx_2 .execute ("SELECT 1 + 1;" ).fetchall ()
86
+ cnx_2 .execute (text ( "SELECT 1 + 1;" ) ).fetchall ()
82
87
83
88
spans = self .memory_exporter .get_finished_spans ()
84
89
# 2 queries + 2 engine connect
@@ -111,7 +116,7 @@ async def run():
111
116
engine = engine .sync_engine , tracer_provider = self .tracer_provider
112
117
)
113
118
async with engine .connect () as cnx :
114
- await cnx .execute (sqlalchemy . text ("SELECT 1 + 1;" ))
119
+ await cnx .execute (text ("SELECT 1 + 1;" ))
115
120
spans = self .memory_exporter .get_finished_spans ()
116
121
self .assertEqual (len (spans ), 2 )
117
122
# first span - the connection to the db
@@ -144,7 +149,7 @@ def test_not_recording(self):
144
149
tracer_provider = self .tracer_provider ,
145
150
)
146
151
cnx = engine .connect ()
147
- cnx .execute ("SELECT 1 + 1;" ).fetchall ()
152
+ cnx .execute (text ( "SELECT 1 + 1;" ) ).fetchall ()
148
153
self .assertFalse (mock_span .is_recording ())
149
154
self .assertTrue (mock_span .is_recording .called )
150
155
self .assertFalse (mock_span .set_attribute .called )
@@ -156,7 +161,7 @@ def test_create_engine_wrapper(self):
156
161
157
162
engine = create_engine ("sqlite:///:memory:" )
158
163
cnx = engine .connect ()
159
- cnx .execute ("SELECT 1 + 1;" ).fetchall ()
164
+ cnx .execute (text ( "SELECT 1 + 1;" ) ).fetchall ()
160
165
spans = self .memory_exporter .get_finished_spans ()
161
166
162
167
self .assertEqual (len (spans ), 2 )
@@ -187,7 +192,7 @@ def test_create_engine_wrapper_enable_commenter(self):
187
192
188
193
engine = create_engine ("sqlite:///:memory:" )
189
194
cnx = engine .connect ()
190
- cnx .execute ("SELECT 1;" ).fetchall ()
195
+ cnx .execute (text ( "SELECT 1;" ) ).fetchall ()
191
196
# sqlcommenter
192
197
self .assertRegex (
193
198
self .caplog .records [- 2 ].getMessage (),
@@ -207,7 +212,7 @@ def test_create_engine_wrapper_enable_commenter_otel_values_false(self):
207
212
208
213
engine = create_engine ("sqlite:///:memory:" )
209
214
cnx = engine .connect ()
210
- cnx .execute ("SELECT 1;" ).fetchall ()
215
+ cnx .execute (text ( "SELECT 1;" ) ).fetchall ()
211
216
# sqlcommenter
212
217
self .assertRegex (
213
218
self .caplog .records [- 2 ].getMessage (),
@@ -233,7 +238,7 @@ def test_custom_tracer_provider(self):
233
238
234
239
engine = create_engine ("sqlite:///:memory:" )
235
240
cnx = engine .connect ()
236
- cnx .execute ("SELECT 1 + 1;" ).fetchall ()
241
+ cnx .execute (text ( "SELECT 1 + 1;" ) ).fetchall ()
237
242
spans = self .memory_exporter .get_finished_spans ()
238
243
239
244
self .assertEqual (len (spans ), 2 )
@@ -258,7 +263,7 @@ async def run():
258
263
259
264
engine = create_async_engine ("sqlite+aiosqlite:///:memory:" )
260
265
async with engine .connect () as cnx :
261
- await cnx .execute (sqlalchemy . text ("SELECT 1 + 1;" ))
266
+ await cnx .execute (text ("SELECT 1 + 1;" ))
262
267
spans = self .memory_exporter .get_finished_spans ()
263
268
self .assertEqual (len (spans ), 2 )
264
269
# first span - the connection to the db
@@ -299,7 +304,7 @@ async def run():
299
304
300
305
engine = create_async_engine ("sqlite+aiosqlite:///:memory:" )
301
306
async with engine .connect () as cnx :
302
- await cnx .execute (sqlalchemy . text ("SELECT 1;" ))
307
+ await cnx .execute (text ("SELECT 1;" ))
303
308
# sqlcommenter
304
309
self .assertRegex (
305
310
self .caplog .records [1 ].getMessage (),
@@ -330,7 +335,7 @@ async def run():
330
335
331
336
engine = create_async_engine ("sqlite+aiosqlite:///:memory:" )
332
337
async with engine .connect () as cnx :
333
- await cnx .execute (sqlalchemy . text ("SELECT 1;" ))
338
+ await cnx .execute (text ("SELECT 1;" ))
334
339
# sqlcommenter
335
340
self .assertRegex (
336
341
self .caplog .records [1 ].getMessage (),
@@ -346,7 +351,7 @@ def test_uninstrument(self):
346
351
tracer_provider = self .tracer_provider ,
347
352
)
348
353
cnx = engine .connect ()
349
- cnx .execute ("SELECT 1 + 1;" ).fetchall ()
354
+ cnx .execute (text ( "SELECT 1 + 1;" ) ).fetchall ()
350
355
spans = self .memory_exporter .get_finished_spans ()
351
356
352
357
self .assertEqual (len (spans ), 2 )
@@ -359,10 +364,10 @@ def test_uninstrument(self):
359
364
360
365
self .memory_exporter .clear ()
361
366
SQLAlchemyInstrumentor ().uninstrument ()
362
- cnx .execute ("SELECT 1 + 1;" ).fetchall ()
367
+ cnx .execute (text ( "SELECT 1 + 1;" ) ).fetchall ()
363
368
engine2 = create_engine ("sqlite:///:memory:" )
364
369
cnx2 = engine2 .connect ()
365
- cnx2 .execute ("SELECT 2 + 2;" ).fetchall ()
370
+ cnx2 .execute (text ( "SELECT 2 + 2;" ) ).fetchall ()
366
371
spans = self .memory_exporter .get_finished_spans ()
367
372
self .assertEqual (len (spans ), 0 )
368
373
@@ -371,7 +376,7 @@ def test_uninstrument(self):
371
376
tracer_provider = self .tracer_provider ,
372
377
)
373
378
cnx = engine .connect ()
374
- cnx .execute ("SELECT 1 + 1;" ).fetchall ()
379
+ cnx .execute (text ( "SELECT 1 + 1;" ) ).fetchall ()
375
380
spans = self .memory_exporter .get_finished_spans ()
376
381
self .assertEqual (len (spans ), 2 )
377
382
@@ -384,13 +389,13 @@ def test_uninstrument_without_engine(self):
384
389
engine = create_engine ("sqlite:///:memory:" )
385
390
386
391
cnx = engine .connect ()
387
- cnx .execute ("SELECT 1 + 1;" ).fetchall ()
392
+ cnx .execute (text ( "SELECT 1 + 1;" ) ).fetchall ()
388
393
spans = self .memory_exporter .get_finished_spans ()
389
394
self .assertEqual (len (spans ), 2 )
390
395
391
396
self .memory_exporter .clear ()
392
397
SQLAlchemyInstrumentor ().uninstrument ()
393
- cnx .execute ("SELECT 1 + 1;" ).fetchall ()
398
+ cnx .execute (text ( "SELECT 1 + 1;" ) ).fetchall ()
394
399
spans = self .memory_exporter .get_finished_spans ()
395
400
self .assertEqual (len (spans ), 0 )
396
401
@@ -401,7 +406,7 @@ def test_no_op_tracer_provider(self):
401
406
tracer_provider = trace .NoOpTracerProvider (),
402
407
)
403
408
cnx = engine .connect ()
404
- cnx .execute ("SELECT 1 + 1;" ).fetchall ()
409
+ cnx .execute (text ( "SELECT 1 + 1;" ) ).fetchall ()
405
410
spans = self .memory_exporter .get_finished_spans ()
406
411
self .assertEqual (len (spans ), 0 )
407
412
@@ -420,7 +425,7 @@ def make_shortlived_engine():
420
425
# collection
421
426
weakref .finalize (engine , callback )
422
427
with engine .connect () as conn :
423
- conn .execute ("SELECT 1 + 1;" ).fetchall ()
428
+ conn .execute (text ( "SELECT 1 + 1;" ) ).fetchall ()
424
429
425
430
for _ in range (0 , 5 ):
426
431
make_shortlived_engine ()
0 commit comments