diff --git a/CHANGELOG.md b/CHANGELOG.md index cf8f245..cd4c321 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Upcoming changes... +## [0.5.0] - 2024-06-24 +### Added +- Added DB query tracing option + +## [0.4.0] - 2024-06-20 +### Added +- Upgraded to goland 1.20 +- Added optional OTEL parameter initialisation + ## [0.3.0] - 2023-11-27 ### Added - Added SQL query tracing support @@ -29,3 +38,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [0.1.0]: https://github.com/scanoss/go-grpc-helper/compare/v0.0.0...v0.1.0 [0.2.0]: https://github.com/scanoss/go-grpc-helper/compare/v0.1.0...v0.2.0 [0.3.0]: https://github.com/scanoss/go-grpc-helper/compare/v0.2.0...v0.3.0 +[0.4.0]: https://github.com/scanoss/go-grpc-helper/compare/v0.3.0...v0.4.0 +[0.5.0]: https://github.com/scanoss/go-grpc-helper/compare/v0.4.0...v0.5.0 diff --git a/pkg/grpc/database/queries.go b/pkg/grpc/database/queries.go index f13dbdc..360364e 100644 --- a/pkg/grpc/database/queries.go +++ b/pkg/grpc/database/queries.go @@ -34,14 +34,15 @@ import ( var sqlRegex = regexp.MustCompile(`\$\d+`) // regex to check for SQL parameters type DBQueryContext struct { + db *sqlx.DB conn *sqlx.Conn s *zap.SugaredLogger trace bool } // NewDBSelectContext creates a new instance of the DBQueryContext service. -func NewDBSelectContext(s *zap.SugaredLogger, conn *sqlx.Conn, trace bool) *DBQueryContext { - return &DBQueryContext{s: s, conn: conn, trace: trace} +func NewDBSelectContext(s *zap.SugaredLogger, db *sqlx.DB, conn *sqlx.Conn, trace bool) *DBQueryContext { + return &DBQueryContext{s: s, db: db, conn: conn, trace: trace} } // SelectContext logs the give query before executing it and the result afterward, if tracing is enabled? @@ -49,7 +50,12 @@ func (q *DBQueryContext) SelectContext(ctx context.Context, dest interface{}, qu if q.trace { q.SQLQueryTrace(query, args...) } - err := q.conn.SelectContext(ctx, dest, query, args...) + var err error + if q.conn != nil { + err = q.conn.SelectContext(ctx, dest, query, args...) + } else { + err = q.db.SelectContext(ctx, dest, query, args...) + } if err == nil && q.trace { q.SQLResultsTrace(dest) } diff --git a/pkg/grpc/database/queries_test.go b/pkg/grpc/database/queries_test.go index 99b69ae..42eae15 100644 --- a/pkg/grpc/database/queries_test.go +++ b/pkg/grpc/database/queries_test.go @@ -53,15 +53,24 @@ func TestQuerySQLite(t *testing.T) { db.MustExec("CREATE TABLE person (firstname text, lastname text)") db.MustExec("INSERT INTO person (firstname, lastname) VALUES ('harry', 'potter')") ctx := context.Background() + + q1 := NewDBSelectContext(zlog.S, db, nil, true) + var results1 []Persons + err = q1.SelectContext(ctx, &results1, "SELECT * FROM person where firstname = $1", "harry") + if err != nil { + t.Errorf("Unexpected error: %v", err) + } + fmt.Printf("Results1: %v\n", results1) + conn, err := db.Connx(ctx) if err != nil { t.Errorf("Unexpected error: %v", err) } - q := NewDBSelectContext(zlog.S, conn, true) - var results []Persons - err = q.SelectContext(ctx, &results, "SELECT * FROM person where firstname = $1", "harry") + q2 := NewDBSelectContext(zlog.S, db, conn, true) + var results2 []Persons + err = q2.SelectContext(ctx, &results2, "SELECT * FROM person where firstname = $1", "harry") if err != nil { t.Errorf("Unexpected error: %v", err) } - fmt.Printf("Results: %v\n", results) + fmt.Printf("Results2: %v\n", results2) }