@@ -120,6 +120,8 @@ fn create_db_query_span(
120120 let operation_name = sql. split_whitespace ( ) . next ( ) . unwrap_or ( "" ) . to_uppercase ( ) ;
121121 let span = tracing:: info_span!(
122122 "db.query" ,
123+ "otel.kind" = "client" ,
124+ "otel.name" = %operation_name,
123125 { otel:: DB_QUERY_TEXT } = sql,
124126 { otel:: DB_SYSTEM_NAME } = db_system_name,
125127 { otel:: DB_OPERATION_NAME } = operation_name,
@@ -892,6 +894,24 @@ mod tests {
892894 . expect ( "closed span fields" )
893895 }
894896
897+ #[ test]
898+ fn db_query_span_uses_otel_database_client_semantics ( ) {
899+ let fields = with_recorded_span_fields ( || {
900+ let ( span, operation_name) =
901+ create_db_query_span ( "select * from users" , Path :: new ( "index.sql" ) , 7 , "sqlite" ) ;
902+ assert_eq ! ( operation_name, "SELECT" ) ;
903+ drop ( span) ;
904+ } ) ;
905+
906+ assert_eq ! ( fields[ "otel.kind" ] , "client" ) ;
907+ assert_eq ! ( fields[ "otel.name" ] , "SELECT" ) ;
908+ assert_eq ! ( fields[ otel:: DB_QUERY_TEXT ] , "select * from users" ) ;
909+ assert_eq ! ( fields[ otel:: DB_SYSTEM_NAME ] , "sqlite" ) ;
910+ assert_eq ! ( fields[ otel:: DB_OPERATION_NAME ] , "SELECT" ) ;
911+ assert_eq ! ( fields[ otel:: CODE_FILE_PATH ] , "index.sql" ) ;
912+ assert_eq ! ( fields[ otel:: CODE_LINE_NUMBER ] , "7" ) ;
913+ }
914+
895915 #[ test]
896916 fn db_query_success_records_ok_status_and_row_count ( ) {
897917 let fields = with_recorded_span_fields ( || {
0 commit comments