@@ -230,6 +230,25 @@ def _operation_name(self, db_name, statement):
230230 return self .vendor
231231 return " " .join (parts )
232232
233+ def _get_commenter_data (self , conn ) -> dict :
234+ """Calculate sqlcomment contents from conn and configured options"""
235+ commenter_data = {
236+ "db_driver" : conn .engine .driver ,
237+ # Driver/framework centric information.
238+ "db_framework" : f"sqlalchemy:{ sqlalchemy .__version__ } " ,
239+ }
240+
241+ if self .commenter_options .get ("opentelemetry_values" , True ):
242+ commenter_data .update (** _get_opentelemetry_values ())
243+
244+ # Filter down to just the requested attributes.
245+ commenter_data = {
246+ k : v
247+ for k , v in commenter_data .items ()
248+ if self .commenter_options .get (k , True )
249+ }
250+ return commenter_data
251+
233252 def _before_cur_exec (
234253 self , conn , cursor , statement , params , context , _executemany
235254 ):
@@ -245,39 +264,42 @@ def _before_cur_exec(
245264 with trace .use_span (span , end_on_exit = False ):
246265 if span .is_recording ():
247266 if self .enable_commenter :
248- commenter_data = {
249- "db_driver" : conn .engine .driver ,
250- # Driver/framework centric information.
251- "db_framework" : f"sqlalchemy:{ sqlalchemy .__version__ } " ,
252- }
253-
254- if self .commenter_options .get (
255- "opentelemetry_values" , True
256- ):
257- commenter_data .update (** _get_opentelemetry_values ())
258-
259- # Filter down to just the requested attributes.
260- commenter_data = {
261- k : v
262- for k , v in commenter_data .items ()
263- if self .commenter_options .get (k , True )
264- }
267+ commenter_data = self ._get_commenter_data (conn )
265268
266269 if self .enable_attribute_commenter :
270+ # sqlcomment in executed query and span attribute
267271 statement = _add_sql_comment (
268272 statement , ** commenter_data
269273 )
274+ span .set_attribute (
275+ SpanAttributes .DB_STATEMENT , statement
276+ )
277+ span .set_attribute (
278+ SpanAttributes .DB_SYSTEM , self .vendor
279+ )
280+ for key , value in attrs .items ():
281+ span .set_attribute (key , value )
270282
271- span .set_attribute (SpanAttributes .DB_STATEMENT , statement )
272- span .set_attribute (SpanAttributes .DB_SYSTEM , self .vendor )
273- for key , value in attrs .items ():
274- span .set_attribute (key , value )
283+ else :
284+ # sqlcomment in executed query only
285+ span .set_attribute (
286+ SpanAttributes .DB_STATEMENT , statement
287+ )
288+ span .set_attribute (
289+ SpanAttributes .DB_SYSTEM , self .vendor
290+ )
291+ for key , value in attrs .items ():
292+ span .set_attribute (key , value )
293+ statement = _add_sql_comment (
294+ statement , ** commenter_data
295+ )
275296
276- if (
277- self .enable_commenter
278- and not self .enable_attribute_commenter
279- ):
280- statement = _add_sql_comment (statement , ** commenter_data )
297+ else :
298+ # no sqlcomment
299+ span .set_attribute (SpanAttributes .DB_STATEMENT , statement )
300+ span .set_attribute (SpanAttributes .DB_SYSTEM , self .vendor )
301+ for key , value in attrs .items ():
302+ span .set_attribute (key , value )
281303
282304 context ._otel_span = span
283305
0 commit comments