Otelsql - OpenTelemetry SQL database driver wrapper for Go

OpenTelemetry SQL database driver wrapper for Go

GitHub Releases Build Status codecov Go Report Card GoDevDoc Donate

Add a OpenTelemetry wrapper to your existing database code to instrument the interactions with the database. The wrapper supports both traces and metrics.

Table of Contents

Prerequisites

  • Go >= 1.16

[table of contents]

Install

go get github.com/nhatthm/otelsql

[table of contents]

Usage

To use otelsql with your application, register the otelsql wrapper by using otelsql.Register(driverName string, opts ...otelsql.DriverOption). For example:

package example

import (
	"database/sql"

	"github.com/nhatthm/otelsql"
	semconv "go.opentelemetry.io/otel/semconv/v1.7.0"
)

func openDB(dsn string) (*sql.DB, error) {
	// Register the otelsql wrapper for the provided postgres driver.
	driverName, err := otelsql.Register("postgres",
		otelsql.AllowRoot(),
		otelsql.TraceQueryWithoutArgs(),
		otelsql.TraceRowsClose(),
		otelsql.TraceRowsAffected(),
		otelsql.WithDatabaseName("my_database"),        // Optional.
		otelsql.WithSystem(semconv.DBSystemPostgreSQL), // Optional.
	)
	if err != nil {
		return nil, err
	}

	// Connect to a Postgres database using the postgres driver wrapper.
	return sql.Open(driverName, dsn)
}

The wrapper will automatically instrument the interactions with the database.

Optionally, you could record database connection metrics using the otelsql.RecordStats(). For example:

package example

import (
	"database/sql"

	"github.com/nhatthm/otelsql"
	semconv "go.opentelemetry.io/otel/semconv/v1.7.0"
)

func openDB(dsn string) (*sql.DB, error) {
	// Register the otelsql wrapper for the provided postgres driver.
	driverName, err := otelsql.Register("postgres",
		otelsql.AllowRoot(),
		otelsql.TraceQueryWithoutArgs(),
		otelsql.TraceRowsClose(),
		otelsql.TraceRowsAffected(),
		otelsql.WithDatabaseName("my_database"),        // Optional.
		otelsql.WithSystem(semconv.DBSystemPostgreSQL), // Optional.
	)
	if err != nil {
		return nil, err
	}

	// Connect to a Postgres database using the postgres driver wrapper.
	db, err := sql.Open(driverName, dsn)
	if err != nil {
		return nil, err
	}

	if err := otelsql.RecordStats(db); err != nil {
		return nil, err
	}

	return db, nil
}

[table of contents]

Options

Driver Options

Option Description
WithMeterProvider(metric.MeterProvider) Specify a meter provider
WithTracerProvider(trace.TracerProvider) Specify a tracer provider
WithDefaultAttributes(...attribute.KeyValue) Add extra attributes for the recorded spans and metrics
WithInstanceName(string) Add an extra attribute for annotating the instance name
WithSystem(attribute.KeyValue) Add an extra attribute for annotating the type of database server.
The value is set by using the well-known identifiers in semconv. For example: semconv.DBSystemPostgreSQL. See more
WithDatabaseName(string) Add an extra attribute for annotating the database name
WithSpanNameFormatter(spanNameFormatter) Set a custom span name formatter
ConvertErrorToSpanStatus(errorToSpanStatus) Set a custom converter for span status
DisableErrSkip() sql.ErrSkip is considered as OK in span status
TraceQuery() Set a custom function for tracing query
TraceQueryWithArgs() Trace query and all arguments
TraceQueryWithoutArgs() Trace query without the arguments
AllowRoot() Create root spans in absence of existing spans or even context
TracePing() Enable the creation of spans on Ping requests
TraceRowsNext() Enable the creation of spans on RowsNext calls. (This can result in many spans)
TraceRowsClose() Enable the creation of spans on RowsClose calls
TraceRowsAffected() Enable the creation of spans on RowsAffected calls
TraceLastInsertID() Enable the creation of spans on LastInsertId call
TraceAll() Turn on all tracing options, including AllowRoot() and TraceQueryWithArgs()

Record Stats Options

Option Description
WithMeterProvider(metric.MeterProvider) Specify a meter provider
WithMinimumReadDBStatsInterval(time.Duration) The minimum interval between calls to db.Stats(). Negative values are ignored.
WithDefaultAttributes(...attribute.KeyValue) Add extra attributes for the recorded metrics
WithInstanceName(string) Add an extra attribute for annotating the instance name
WithSystem(attribute.KeyValue) Add an extra attribute for annotating the type of database server.
The value is set by using the well-known identifiers in semconv. For example: semconv.DBSystemPostgreSQL. See more
WithDatabaseName(string) Add an extra attribute for annotating the database name

[table of contents]

Extras

[table of contents]

Span Name Formatter

By default, spans will be created with the sql:METHOD format, like sql:exec or sql:query. You could change this behavior by using the WithSpanNameFormatter() option and set your own logic.

For example

package example

import (
	"context"
	"database/sql"

	"github.com/nhatthm/otelsql"
)

func openDB(dsn string) (*sql.DB, error) {
	driverName, err := otelsql.Register("my-driver",
		otelsql.WithSpanNameFormatter(func(_ context.Context, op string) string {
			return "main-db:" + op
		}),
	)
	if err != nil {
		return nil, err
	}

	return sql.Open(driverName, dsn)
}

[table of contents]

Convert Error to Span Status

By default, all errors are considered as ERROR while setting span status, except io.EOF on RowsNext calls (which is OK). otelsql also provides an extra option DisableErrSkip() if you want to ignore the sql.ErrSkip.

You can write your own conversion by using the ConvertErrorToSpanStatus() option. For example

package example

import (
	"database/sql"
	"errors"

	"github.com/nhatthm/otelsql"
	"go.opentelemetry.io/otel/codes"
)

func openDB(dsn string) (*sql.DB, error) {
	driverName, err := otelsql.Register("my-driver",
		otelsql.ConvertErrorToSpanStatus(func(err error) (codes.Code, string) {
			if err == nil || errors.Is(err, ignoredError) {
				return codes.Ok, ""
			}

			return codes.Error, err.Error()
		}),
	)
	if err != nil {
		return nil, err
	}

	return sql.Open(driverName, dsn)
}

[table of contents]

Trace Query

By default, otelsql does not trace query and arguments. When you use these options:

  • TraceQueryWithArgs(): Trace the query and all arguments.
  • TraceQueryWithoutArgs(): Trace only the query, without the arguments.

The traced query will be set in the semconv.DBStatementKey attribute (db.statement) and the arguments are set as follows:

  • db.sql.args.NAME: if the arguments are named.
  • db.sql.args.ORDINAL: Otherwise.

Example #1:

SELECT *
FROM data
WHERE country = :country

The argument attribute will be db.sql.args.country

Example #2:

SELECT *
FROM data
WHERE country = $1

The argument attribute will be db.sql.args.1

You can change this behavior for your own purpose (like, redaction or stripping out sensitive information) by using the TraceQuery() option. For example:

package example

import (
	"context"
	"database/sql"
	"database/sql/driver"

	"github.com/nhatthm/otelsql"
	"go.opentelemetry.io/otel/attribute"
	"go.opentelemetry.io/otel/codes"
	semconv "go.opentelemetry.io/otel/semconv/v1.7.0"
)

func openDB(dsn string) (*sql.DB, error) {
	driverName, err := otelsql.Register("my-driver",
		otelsql.TraceQuery(func(_ context.Context, query string, args []driver.NamedValue) []attribute.KeyValue {
			attrs := make([]attribute.KeyValue, 0, 1+len(args))

			attrs = append(attrs, semconv.DBStatementKey.String(query))

			// Your redaction goes here.

			return attrs
		}),
	)
	if err != nil {
		return nil, err
	}

	return sql.Open(driverName, dsn)
}

[table of contents]

AllowRoot() and Span Context

To fully take advantage of otelsql, all database calls should be made using the *Context methods. Failing to do so will result in many orphaned traces if the AllowRoot() is used. By default, AllowRoot() is disabled and will result in otelsql not tracing the database calls if context or parent spans are missing.

Old New
*DB.Begin *DB.BeginTx
*DB.Exec *DB.ExecContext
*DB.Ping *DB.PingContext
*DB.Prepare *DB.PrepareContext
*DB.Query *DB.QueryContext
*DB.QueryRow *DB.QueryRowContext
*Stmt.Exec *Stmt.ExecContext
*Stmt.Query *Stmt.QueryContext
*Stmt.QueryRow *Stmt.QueryRowContext
*Tx.Exec *Tx.ExecContext
*Tx.Prepare *Tx.PrepareContext
*Tx.Query *Tx.QueryContext
*Tx.QueryRow *Tx.QueryRowContext

[table of contents]

jmoiron/sqlx

If using the jmoiron/sqlx library with named queries you will need to use the sqlx.NewDb function to wrap an existing *sql.DB connection. Do not use the sqlx.Open and sqlx.Connect methods. jmoiron/sqlx uses the driver name to figure out which database is being used. It uses this knowledge to convert named queries to the correct bind type (dollar sign, question mark) if named queries are not supported natively by the database. Since otelsql creates a new driver name it will not be recognized by jmoiron/sqlx and named queries will fail.

For example:

package example

import (
	"database/sql"

	"github.com/jmoiron/sqlx"
	"github.com/nhatthm/otelsql"
)

func openDB(dsn string) (*sql.DB, error) {
	driverName, err := otelsql.Register("my-driver",
		otelsql.AllowRoot(),
		otelsql.TraceQueryWithoutArgs(),
		otelsql.TraceRowsClose(),
		otelsql.TraceRowsAffected(),
	)
	if err != nil {
		return nil, err
	}

	db, err := sql.Open(driverName, dsn)
	if err != nil {
		return nil, err
	}

	return sqlx.NewDb(db, "my-driver"), nil
}

[table of contents]

Metrics

Attributes (applies to all the metrics below)

Attribute Description Note
db_operation The executed sql method For example: exec, query, prepare
db_sql_status The execution status OK if no error, otherwise ERROR
db_sql_error The error message When status is ERROR. The value is the error message
db_instance The instance name Only when using WithInstanceName() option
db_system The system name Only when using WithSystem() option
db_name The database name Only when using WithDatabaseName() option

WithDefaultAttributes(attrs ...attribute.KeyValue) will also add the attrs to the recorded metrics.

[table of contents]

Client Metrics

Metric Description
db_sql_client_calls{db_instance,db_operation,db_sql_status,db_system,db_name} Number of Calls (Counter)
db_sql_client_latency_bucket{db_instance,db_operation,db_sql_status,db_system,db_name,le} Latency in milliseconds (Histogram)
db_sql_client_latency_sum{db_instance,db_operation,db_sql_status,db_system,db_name}
db_sql_client_latency_count{db_instance,db_operation,db_sql_status,db_system,db_name}

[table of contents]

Database Connection Metrics

Metric Description
db_sql_connections_active{db_instance,db_system,db_name} Number of active connections
db_sql_connections_idle{db_instance,db_system,db_name} Number of idle connections
db_sql_connections_idle_closed{db_instance,db_system,db_name} Total number of closed connections by SetMaxIdleConns
db_sql_connections_lifetime_closed{db_instance,db_system,db_name} Total number of closed connections by SetConnMaxLifetime
db_sql_connections_open{db_instance,db_system,db_name} Number of open connections
db_sql_connections_wait_count{db_instance,db_system,db_name} Total number of connections waited for
db_sql_connections_wait_duration{db_instance,db_system,db_name} Total time blocked waiting for new connections

[table of contents]

Traces

Operation Trace
*DB.BeginTx Always
*DB.ExecContext Always
*DB.PingContext Disabled. Use TracePing() to enable
*DB.PrepareContext Always
*DB.QueryContext Always
*DB.QueryRowContext Always
*Stmt.ExecContext Always
*Stmt.QueryContext Always
*Stmt.QueryRowContext Always
*Tx.ExecContext Always
*Tx.PrepareContext Always
*Tx.QueryContext Always
*Tx.QueryRowContext Always
*Rows.Next Disabled. Use TraceRowsNext() to enable
*Rows.Close Disabled. Use TraceRowsClose() to enable
*Result.LastInsertID Disabled. Use TraceLastInsertID() to enable
*Result.RowsAffected Disabled. Use TraceRowsAffected() to enable

ExecContext, QueryContext, QueryRowContext, PrepareContext are always traced without query args unless using TraceQuery(), TraceQueryWithArgs(), or TraceQueryWithoutArgs() option.

Using WithDefaultAttributes(...attribute.KeyValue) will add extra attributes to the recorded spans.

[table of contents]

Migration from ocsql

The migration is easy because the behaviors of otelsql are the same as ocsql, and all options are almost similar.

ocsql otelsql
Register driver wrapper Register(driverName string, options ...TraceOption) Register(driverName string, options ...DriverOption)
Records database statistics RecordStats(db *sql.DB, interval time.Duration) RecordStats(db *sql.DB, opts ...StatsOption)

The interval in RecordStats() is replaced with WithMinimumReadDBStatsInterval(time.Duration) option.

[table of contents]

Options

ocsql otelsql
WithAllTraceOptions() TraceAll()
otelsql always set to true
WithOptions(ocsql.TraceOptions) Dropped
WithAllowRoot(bool) AllowRoot()
otelsql always set to true
WithPing(bool) TracePing()
otelsql always set to true
WithRowsNext(bool) TraceRowsNext()
otelsql always set to true
WithRowsClose(bool) TraceRowsClose()
otelsql always set to true
WithRowsAffected(bool) TraceRowsAffected()
otelsql always set to true
WithLastInsertID(bool) TraceLastInsertID()
otelsql always set to true
WithQuery(bool)
WithQueryParams(bool)
TraceQueryWithArgs()
TraceQueryWithoutArgs()
WithDefaultAttributes(...trace.Attribute) WithDefaultAttributes(...attribute.KeyValue)
WithDisableErrSkip(bool) DisableErrSkip()
WithSampler(trace.Sampler) Dropped
WithInstanceName(string) WithInstanceName(string)

[table of contents]

Metrics

Attributes (applies to all the metrics below)

ocsql otelsql Note
go_sql_instance db_instance Only when using WithInstanceName() option
go_sql_method db_operation
go_sql_status db_sql_status
n/a db_system Only when using WithSystem() option
n/a db_name Only when using WithDatabaseName() option

Client Metrics

ocsql otelsql
go_sql_client_calls{go_sql_instance,go_sql_method,go_sql_status} db_sql_client_calls{db_instance,db_operation,db_sql_status,db_system,db_name}
go_sql_client_latency_bucket{go_sql_instance,go_sql_method,go_sql_status,le} db_sql_client_latency_bucket{db_instance,db_operation,db_sql_status,db_system,db_name,le}
go_sql_client_latency_sum{go_sql_instance,go_sql_method,go_sql_status} db_sql_client_latency_sum{db_instance,db_operation,db_sql_status,db_system,db_name}
go_sql_client_latency_count{go_sql_instance,go_sql_method,go_sql_status} db_sql_client_latency_count{db_instance,db_operation,db_sql_status,db_system,db_name}

Connection Metrics

ocsql otelsql
go_sql_db_connections_active{go_sql_instance} db_sql_connections_active{db_instance,db_system,db_name}
go_sql_db_connections_idle{go_sql_instance} db_sql_connections_idle{db_instance,db_system,db_name}
go_sql_db_connections_idle_closed_count{go_sql_instance} db_sql_connections_idle_closed{db_instance,db_system,db_name}
go_sql_db_connections_lifetime_closed_count{go_sql_instance} db_sql_connections_lifetime_closed{db_instance,db_system,db_name}
go_sql_db_connections_open{go_sql_instance} db_sql_connections_open{db_instance,db_system,db_name}
go_sql_db_connections_wait_count{go_sql_instance} db_sql_connections_wait_count{db_instance,db_system,db_name}
go_sql_db_connections_wait_duration{go_sql_instance} db_sql_connections_wait_duration{db_instance,db_system,db_name}

[table of contents]

Traces

The traces are almost identical with some minor changes:

  1. Named arguments are not just recorder as <NAME> in the span. They are now db.sql.args.<NAME>.
  2. sql.query is now db.statement.

[table of contents]

Compatibility

OS
Driver Database Ubuntu MacOS Windows
go 1.16 go 1.17 go 1.16 go 1.17 go 1.16 go 1.17
DATA-DOG/go-sqlmock Build Status
jmoiron/sqlx Manually tested
jackc/pgx/stdlib Postgres 12 Manually tested

If you don't see a driver in the list, it doesn't mean the wrapper is incompatible. it's just not tested. Let me know if it works with your driver

[table of contents]

Donation

If this project help you reduce time to develop, you can give me a cup of coffee :)

[table of contents]

Paypal donation

paypal

       or scan this

Owner
Nhat
🚀 Tech-savvy and Biker 🏍
Nhat
Comments
  • Bump github.com/swaggest/assertjson from 1.6.8 to 1.7.0 in /tests/suite

    Bump github.com/swaggest/assertjson from 1.6.8 to 1.7.0 in /tests/suite

    Bumps github.com/swaggest/assertjson from 1.6.8 to 1.7.0.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Bump github.com/Masterminds/squirrel from 1.5.2 to 1.5.3 in /tests/postgres

    Bump github.com/Masterminds/squirrel from 1.5.2 to 1.5.3 in /tests/postgres

    Bumps github.com/Masterminds/squirrel from 1.5.2 to 1.5.3.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Bump github.com/Masterminds/squirrel from 1.5.2 to 1.5.3 in /tests/mysql

    Bump github.com/Masterminds/squirrel from 1.5.2 to 1.5.3 in /tests/mysql

    Bumps github.com/Masterminds/squirrel from 1.5.2 to 1.5.3.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Bump go.opentelemetry.io/otel/metric from 0.32.1 to 0.32.2

    Bump go.opentelemetry.io/otel/metric from 0.32.1 to 0.32.2

    Bumps go.opentelemetry.io/otel/metric from 0.32.1 to 0.32.2.

    Release notes

    Sourced from go.opentelemetry.io/otel/metric's releases.

    Release v0.32.2 -- Metric SDK (Alpha)

    Added

    • Added an example of using metric views to customize instruments. (#3177)
    • Add default User-Agent header to OTLP exporter requests (go.opentelemetry.io/otel/exporters/otlpmetric/otlpmetricgrpc and go.opentelemetry.io/otel/exporters/otlpmetric/otlpmetrichttp). (#3261)

    Changed

    • Flush pending measurements with the PeriodicReader in the go.opentelemetry.io/otel/sdk/metric when ForceFlush or Shutdown are called. (#3220)
    • Update histogram default bounds to match the requirements of the latest specification. (#3222)

    Fixed

    • Use default view if instrument does not match any registered view of a reader. (#3224, #3237)
    • Return the same instrument every time a user makes the exact same instrument creation call. (#3229, #3251)
    • Return the existing instrument when a view transforms a creation call to match an existing instrument. (#3240, #3251)
    • Log a warning when a conflicting instrument (e.g. description, unit, data-type) is created instead of returning an error. (#3251)
    • The OpenCensus bridge no longer sends empty batches of metrics. (#3263)
    Changelog

    Sourced from go.opentelemetry.io/otel/metric's changelog.

    [0.32.2] Metric SDK (Alpha) - 2022-10-11

    Added

    • Added an example of using metric views to customize instruments. (#3177)
    • Add default User-Agent header to OTLP exporter requests (go.opentelemetry.io/otel/exporters/otlpmetric/otlpmetricgrpc and go.opentelemetry.io/otel/exporters/otlpmetric/otlpmetrichttp). (#3261)

    Changed

    • Flush pending measurements with the PeriodicReader in the go.opentelemetry.io/otel/sdk/metric when ForceFlush or Shutdown are called. (#3220)
    • Update histogram default bounds to match the requirements of the latest specification. (#3222)

    Fixed

    • Use default view if instrument does not match any registered view of a reader. (#3224, #3237)
    • Return the same instrument every time a user makes the exact same instrument creation call. (#3229, #3251)
    • Return the existing instrument when a view transforms a creation call to match an existing instrument. (#3240, #3251)
    • Log a warning when a conflicting instrument (e.g. description, unit, data-type) is created instead of returning an error. (#3251)
    • The OpenCensus bridge no longer sends empty batches of metrics. (#3263)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Bump go.nhat.io/testcontainers-extra from 0.6.0 to 0.7.0 in /tests/suite

    Bump go.nhat.io/testcontainers-extra from 0.6.0 to 0.7.0 in /tests/suite

    Bumps go.nhat.io/testcontainers-extra from 0.6.0 to 0.7.0.

    Release notes

    Sourced from go.nhat.io/testcontainers-extra's releases.

    v0.7.0

    What's Changed

    Full Changelog: https://github.com/nhatthm/testcontainers-go-extra/compare/v0.6.0...v0.7.0

    Commits
    • c951d59 Update registry on tags release
    • 9b03fbf Fix broken registry notification workflow (#31)
    • 0382bfc Bump github.com/testcontainers/testcontainers-go from 0.14.0 to 0.15.0 (#29)
    • df32e24 Bump github.com/stretchr/testify from 1.8.0 to 1.8.1 (#30)
    • 639caa2 Bump github.com/docker/docker (#28)
    • e377e13 Bump github.com/docker/docker (#27)
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Bump github.com/stretchr/testify from 1.8.0 to 1.8.1

    Bump github.com/stretchr/testify from 1.8.0 to 1.8.1

    Bumps github.com/stretchr/testify from 1.8.0 to 1.8.1.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Bump go.opentelemetry.io/otel/metric from 0.32.3 to 0.33.0

    Bump go.opentelemetry.io/otel/metric from 0.32.3 to 0.33.0

    Bumps go.opentelemetry.io/otel/metric from 0.32.3 to 0.33.0.

    Changelog

    Sourced from go.opentelemetry.io/otel/metric's changelog.

    [1.11.1/0.33.0] 2022-10-19

    Added

    • The Prometheus exporter in go.opentelemetry.io/otel/exporters/prometheus registers with a Prometheus registerer on creation. By default, it will register with the default Prometheus registerer. A non-default registerer can be used by passing the WithRegisterer option. (#3239)
    • Added the WithAggregationSelector option to the go.opentelemetry.io/otel/exporters/prometheus package to change the default AggregationSelector used. (#3341)
    • The Prometheus exporter in go.opentelemetry.io/otel/exporters/prometheus converts the Resource associated with metric exports into a target_info metric. (#3285)

    Changed

    • The "go.opentelemetry.io/otel/exporters/prometheus".New function is updated to return an error. It will return an error if the exporter fails to register with Prometheus. (#3239)

    Fixed

    • The URL-encoded values from the OTEL_RESOURCE_ATTRIBUTES environment variable are decoded. (#2963)
    • The baggage.NewMember function decodes the value parameter instead of directly using it. This fixes the implementation to be compliant with the W3C specification. (#3226)
    • Slice attributes of the attribute package are now comparable based on their value, not instance. (#3108 #3252)
    • The Shutdown and ForceFlush methods of the "go.opentelemetry.io/otel/sdk/trace".TraceProvider no longer return an error when no processor is registered. (#3268)
    • The Prometheus exporter in go.opentelemetry.io/otel/exporters/prometheus cumulatively sums histogram buckets. (#3281)
    • The sum of each histogram data point is now uniquely exported by the go.opentelemetry.io/otel/exporters/otlpmetric exporters. (#3284, #3293)
    • Recorded values for asynchronous counters (Counter and UpDownCounter) are interpreted as exact, not incremental, sum values by the metric SDK. (#3350, #3278)
    • UpDownCounters are now correctly output as Prometheus gauges in the go.opentelemetry.io/otel/exporters/prometheus exporter. (#3358)
    • The Prometheus exporter in go.opentelemetry.io/otel/exporters/prometheus no longer describes the metrics it will send to Prometheus on startup. Instead the exporter is defined as an "unchecked" collector for Prometheus. This fixes the reader is not registered warning currently emitted on startup. (#3291 #3342)
    • The go.opentelemetry.io/otel/exporters/prometheus exporter now correctly adds _total suffixes to counter metrics. (#3360)
    • The go.opentelemetry.io/otel/exporters/prometheus exporter now adds a unit suffix to metric names. This can be disabled using the WithoutUnits() option added to that package. (#3352)
    Commits
    • 2fe8861 Release v1.11.1/v0.33.0 (#3367)
    • 510910e Add unit suffixes to prometheus metric names (#3352)
    • 1d9d4b2 add _total suffixes to prometheus counters (#3360)
    • 715631d Fix Asynchronous Counters Recording (#3350)
    • 2d02a2f converts Resource into a target_info metric on the prometheus exporter (#...
    • 05aca23 Decode values from OTEL_RESOURCE_ATTRIBUTES (#2963)
    • 430f558 Convert UpDownCounters to Prometheus gauges (#3358)
    • 6c0a7c4 Fix getting-started.md with the correct import packages in main.go (#3354)
    • ad45631 Bump github.com/itchyny/gojq from 0.12.7 to 0.12.9 in /internal/tools (#3303)
    • 537660e Bump lycheeverse/lychee-action from 1.4.1 to 1.5.1 (#3301)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Bump go.opentelemetry.io/otel/trace from 1.11.0 to 1.11.1

    Bump go.opentelemetry.io/otel/trace from 1.11.0 to 1.11.1

    Bumps go.opentelemetry.io/otel/trace from 1.11.0 to 1.11.1.

    Changelog

    Sourced from go.opentelemetry.io/otel/trace's changelog.

    [1.11.1/0.33.0] 2022-10-19

    Added

    • The Prometheus exporter in go.opentelemetry.io/otel/exporters/prometheus registers with a Prometheus registerer on creation. By default, it will register with the default Prometheus registerer. A non-default registerer can be used by passing the WithRegisterer option. (#3239)
    • Added the WithAggregationSelector option to the go.opentelemetry.io/otel/exporters/prometheus package to change the default AggregationSelector used. (#3341)
    • The Prometheus exporter in go.opentelemetry.io/otel/exporters/prometheus converts the Resource associated with metric exports into a target_info metric. (#3285)

    Changed

    • The "go.opentelemetry.io/otel/exporters/prometheus".New function is updated to return an error. It will return an error if the exporter fails to register with Prometheus. (#3239)

    Fixed

    • The URL-encoded values from the OTEL_RESOURCE_ATTRIBUTES environment variable are decoded. (#2963)
    • The baggage.NewMember function decodes the value parameter instead of directly using it. This fixes the implementation to be compliant with the W3C specification. (#3226)
    • Slice attributes of the attribute package are now comparable based on their value, not instance. (#3108 #3252)
    • The Shutdown and ForceFlush methods of the "go.opentelemetry.io/otel/sdk/trace".TraceProvider no longer return an error when no processor is registered. (#3268)
    • The Prometheus exporter in go.opentelemetry.io/otel/exporters/prometheus cumulatively sums histogram buckets. (#3281)
    • The sum of each histogram data point is now uniquely exported by the go.opentelemetry.io/otel/exporters/otlpmetric exporters. (#3284, #3293)
    • Recorded values for asynchronous counters (Counter and UpDownCounter) are interpreted as exact, not incremental, sum values by the metric SDK. (#3350, #3278)
    • UpDownCounters are now correctly output as Prometheus gauges in the go.opentelemetry.io/otel/exporters/prometheus exporter. (#3358)
    • The Prometheus exporter in go.opentelemetry.io/otel/exporters/prometheus no longer describes the metrics it will send to Prometheus on startup. Instead the exporter is defined as an "unchecked" collector for Prometheus. This fixes the reader is not registered warning currently emitted on startup. (#3291 #3342)
    • The go.opentelemetry.io/otel/exporters/prometheus exporter now correctly adds _total suffixes to counter metrics. (#3360)
    • The go.opentelemetry.io/otel/exporters/prometheus exporter now adds a unit suffix to metric names. This can be disabled using the WithoutUnits() option added to that package. (#3352)
    Commits
    • 2fe8861 Release v1.11.1/v0.33.0 (#3367)
    • 510910e Add unit suffixes to prometheus metric names (#3352)
    • 1d9d4b2 add _total suffixes to prometheus counters (#3360)
    • 715631d Fix Asynchronous Counters Recording (#3350)
    • 2d02a2f converts Resource into a target_info metric on the prometheus exporter (#...
    • 05aca23 Decode values from OTEL_RESOURCE_ATTRIBUTES (#2963)
    • 430f558 Convert UpDownCounters to Prometheus gauges (#3358)
    • 6c0a7c4 Fix getting-started.md with the correct import packages in main.go (#3354)
    • ad45631 Bump github.com/itchyny/gojq from 0.12.7 to 0.12.9 in /internal/tools (#3303)
    • 537660e Bump lycheeverse/lychee-action from 1.4.1 to 1.5.1 (#3301)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Bump go.opentelemetry.io/otel/trace from 1.10.0 to 1.11.0

    Bump go.opentelemetry.io/otel/trace from 1.10.0 to 1.11.0

    Bumps go.opentelemetry.io/otel/trace from 1.10.0 to 1.11.0.

    Changelog

    Sourced from go.opentelemetry.io/otel/trace's changelog.

    [1.11.0/0.32.3] 2022-10-12

    Added

    • Add default User-Agent header to OTLP exporter requests (go.opentelemetry.io/otel/exporters/otlptrace/otlptracegrpc and go.opentelemetry.io/otel/exporters/otlptrace/otlptracehttp). (#3261)

    Changed

    • span.SetStatus has been updated such that calls that lower the status are now no-ops. (#3214)
    • Upgrade golang.org/x/sys/unix from v0.0.0-20210423185535-09eb48e85fd7 to v0.0.0-20220919091848-fb04ddd9f9c8. This addresses GO-2022-0493. (#3235)

    [0.32.2] Metric SDK (Alpha) - 2022-10-11

    Added

    • Added an example of using metric views to customize instruments. (#3177)
    • Add default User-Agent header to OTLP exporter requests (go.opentelemetry.io/otel/exporters/otlpmetric/otlpmetricgrpc and go.opentelemetry.io/otel/exporters/otlpmetric/otlpmetrichttp). (#3261)

    Changed

    • Flush pending measurements with the PeriodicReader in the go.opentelemetry.io/otel/sdk/metric when ForceFlush or Shutdown are called. (#3220)
    • Update histogram default bounds to match the requirements of the latest specification. (#3222)
    • Encode the HTTP status code in the OpenTracing bridge (go.opentelemetry.io/otel/bridge/opentracing) as an integer. (#3265)

    Fixed

    • Use default view if instrument does not match any registered view of a reader. (#3224, #3237)
    • Return the same instrument every time a user makes the exact same instrument creation call. (#3229, #3251)
    • Return the existing instrument when a view transforms a creation call to match an existing instrument. (#3240, #3251)
    • Log a warning when a conflicting instrument (e.g. description, unit, data-type) is created instead of returning an error. (#3251)
    • The OpenCensus bridge no longer sends empty batches of metrics. (#3263)

    [0.32.1] Metric SDK (Alpha) - 2022-09-22

    Changed

    • The Prometheus exporter sanitizes OpenTelemetry instrument names when exporting. Invalid characters are replaced with _. (#3212)

    Added

    • The metric portion of the OpenCensus bridge (go.opentelemetry.io/otel/bridge/opencensus) has been reintroduced. (#3192)
    • The OpenCensus bridge example (go.opentelemetry.io/otel/example/opencensus) has been reintroduced. (#3206)

    Fixed

    • Updated go.mods to point to valid versions of the sdk. (#3216)
    • Set the MeterProvider resource on all exported metric data. (#3218)

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Bump github.com/godogx/clocksteps from 0.1.1 to 0.2.0 in /tests/suite

    Bump github.com/godogx/clocksteps from 0.1.1 to 0.2.0 in /tests/suite

    Bumps github.com/godogx/clocksteps from 0.1.1 to 0.2.0.

    Release notes

    Sourced from github.com/godogx/clocksteps's releases.

    v0.2.0

    What's Changed

    Full Changelog: https://github.com/godogx/clocksteps/compare/v0.1.1...v0.2.0

    Commits
    • 69ed02d Bump dependencies (#12)
    • 4fae830 Bump github.com/stretchr/testify from 1.7.5 to 1.8.0 (#11)
    • d39c346 Bump github.com/stretchr/testify from 1.7.2 to 1.7.5 (#10)
    • 022390d Bump github.com/stretchr/testify from 1.7.1 to 1.7.2 (#7)
    • 78326d8 Bump github.com/cucumber/godog from 0.12.4 to 0.12.5 (#6)
    • eae7e51 Bump github.com/stretchr/testify from 1.7.0 to 1.7.1 (#5)
    • 1167545 Bump github.com/cucumber/godog from 0.12.3 to 0.12.4 (#4)
    • 2643772 Bump github.com/cucumber/godog from 0.12.2 to 0.12.3 (#3)
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Bump github.com/stretchr/testify from 1.7.3 to 1.7.4 in /tests/suite

    Bump github.com/stretchr/testify from 1.7.3 to 1.7.4 in /tests/suite

    Bumps github.com/stretchr/testify from 1.7.3 to 1.7.4.

    Commits
    • 48391ba Fix panic in AssertExpectations for mocks without expectations (#1207)
    • 840cb80 arrays value types in a zero-initialized state are considered empty (#1126)
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Devcloud-go provides a sql-driver for mysql which named devspore driver and a redis client which named devspore client,

Devcloud-go Devcloud-go provides a sql-driver for mysql which named devspore driver and a redis client which named devspore client, you can use them w

Jun 9, 2022
Attach hooks to any database/sql driver

sqlhooks Attach hooks to any database/sql driver. The purpose of sqlhooks is to provide a way to instrument your sql statements, making really easy to

Jan 6, 2023
BigQuery database/sql golang driver

BigQuery SQL Driver This library is compatible with Go 1.17+ Please refer to CHA

Dec 7, 2022
Google Cloud Spanner driver for Go's database/sql package.

go-sql-spanner Google Cloud Spanner driver for Go's database/sql package. This support is currently in the Preview release status. import _ "github.co

Dec 11, 2022
Go-driver-benchmark - Driver benchmark with golang

We use ClickkHouse for time-series databases, and the driver's performance is ve

Sep 5, 2022
Package dbi implements an experimental database/sql wrapper.

dbi Package dbi implements a database/sql wrapper. This is an EXPERIMENTAL package used for experimenting. Installation The recommended way to install

Feb 8, 2022
sqlcomment is an ent driver that adds SQL comments following sqlcommenter specification.

sqlcomment sqlcomment is an ent driver that adds SQL comments following sqlcommenter specification. sqlcomment includes support for OpenTelemetry and

Nov 14, 2022
OpenTelemetry instrumentations for Go

OpenTelemetry instrumentations for Go Instrumentation Package Metrics Traces database/sql ✔️ ✔️ GORM ✔️ ✔️ sqlx ✔️ ✔️ logrus ✔️ Zap ✔️ Contributing To

Dec 26, 2022
Distributed tracing using OpenTelemetry and ClickHouse

Distributed tracing backend using OpenTelemetry and ClickHouse Uptrace is a dist

Jan 2, 2023
A fully-featured AWS Athena database driver (+ athenareader https://github.com/uber/athenadriver/tree/master/athenareader)
A fully-featured AWS Athena database driver (+ athenareader https://github.com/uber/athenadriver/tree/master/athenareader)

?? athenadriver - A fully-featured AWS Athena database driver for Go ?? athenareader - A moneywise command line utililty to query athena in command li

Jan 3, 2023
Apache H2 Database Go Driver

Apache H2 Database Go Driver This driver is VERY experimental state NOT use for production yet Introduction Apache H2 Database is a very-low footprint

Nov 27, 2022
Golang database driver for SQLite

go-sqlite Golang database driver for SQLite. Does not use cgo. This driver is based on pure-Go SQLite implementation (https://gitlab.com/cznic/sqlite)

Dec 30, 2022
SQL transaction wrapper on golang

TxWrapper TxWrapper is a sql transaction wrapper. It helps to exclude writing code for rollback and commit commands. Usage import ( "context"

Mar 14, 2022
write APIs using direct SQL queries with no hassle, let's rethink about SQL

SQLer SQL-er is a tiny portable server enables you to write APIs using SQL query to be executed when anyone hits it, also it enables you to define val

Jan 7, 2023
Parses a file and associate SQL queries to a map. Useful for separating SQL from code logic

goyesql This package is based on nleof/goyesql but is not compatible with it any more. This package introduces support for arbitrary tag types and cha

Oct 20, 2021
Go-sql-reader - Go utility to read the externalised sql with predefined tags

go-sql-reader go utility to read the externalised sql with predefined tags Usage

Jan 25, 2022
Database wrapper that manage read write connections

rwdb Database wrapper that manage read write connections Install go get github.com/andizzle/rwdb Create connections package main import "github.com/

Dec 10, 2022
A database connection wrapper to cache prepared statements by transforming queries to use with array arguments.

sqlpp sqlpp is a sql(MySQL and PostgreSQL) database connection wrapper to cache prepared statements by transforming queries ("...in (?)...", []) to us

Feb 9, 2022
sqlx is a library which provides a set of extensions on go's standard database/sql library

sqlx is a library which provides a set of extensions on go's standard database/sql library. The sqlx versions of sql.DB, sql.TX, sql.Stmt, et al. all leave the underlying interfaces untouched, so that their interfaces are a superset on the standard ones. This makes it relatively painless to integrate existing codebases using database/sql with sqlx.

Jan 7, 2023