github.com/waldiirawan/apm-agent-go/v2@v2.2.2/sqlutil/drivername.go (about)

     1  // Licensed to Elasticsearch B.V. under one or more contributor
     2  // license agreements. See the NOTICE file distributed with
     3  // this work for additional information regarding copyright
     4  // ownership. Elasticsearch B.V. licenses this file to you under
     5  // the Apache License, Version 2.0 (the "License"); you may
     6  // not use this file except in compliance with the License.
     7  // You may obtain a copy of the License at
     8  //
     9  //     http://www.apache.org/licenses/LICENSE-2.0
    10  //
    11  // Unless required by applicable law or agreed to in writing,
    12  // software distributed under the License is distributed on an
    13  // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    14  // KIND, either express or implied.  See the License for the
    15  // specific language governing permissions and limitations
    16  // under the License.
    17  
    18  package sqlutil // import "github.com/waldiirawan/apm-agent-go/v2/sqlutil"
    19  
    20  import (
    21  	"database/sql/driver"
    22  	"reflect"
    23  	"strings"
    24  )
    25  
    26  // DriverName returns the name of the driver, based on its type.
    27  // If the driver name cannot be deduced, DriverName will return
    28  // "generic".
    29  func DriverName(d driver.Driver) string {
    30  	t := reflect.TypeOf(d)
    31  	if t.Kind() == reflect.Ptr {
    32  		t = t.Elem()
    33  	}
    34  	switch t.Name() {
    35  	case "SQLiteDriver":
    36  		return "sqlite3"
    37  	case "MySQLDriver":
    38  		return "mysql"
    39  	case "Driver":
    40  		// Check suffix in case of vendoring.
    41  		if strings.HasSuffix(t.PkgPath(), "github.com/lib/pq") {
    42  			return "postgresql"
    43  		}
    44  
    45  		if strings.HasPrefix(t.PkgPath(), "github.com/jackc/pgx/") {
    46  			return "postgresql"
    47  		}
    48  
    49  		if strings.HasPrefix(t.PkgPath(), "github.com/denisenkom/go-mssqldb") {
    50  			return "sqlserver"
    51  		}
    52  	}
    53  	// TODO include the package path of the driver in context
    54  	// so we can easily determine how the rules above should
    55  	// be updated.
    56  	return "generic"
    57  }