sqlbreaker

package module
v0.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 10, 2023 License: Apache-2.0 Imports: 6 Imported by: 0

README

sqlbreaker

Godoc Go Report Card Release codecov Download GitHub

A low-code intrusion library that provides SQL breaker capabilities, suitable for any relational database (Sqlite3, MySQL, Oracle, SQL Server, PostgreSQL, TiDB, TDengine, etc.) and ORM libraries for various relational database (gorm, xorm, sqlx, etc.)

😜installation

go get -u github.com/chenquan/sqlbreaker

👏how to use

package main

import (
	"context"
	"database/sql"
	"fmt"

	"github.com/chenquan/sqlbreaker"
	"github.com/chenquan/sqlbreaker/pkg/breaker"
	"github.com/chenquan/sqlplus"
	"github.com/chenquan/sqltrace"
	"github.com/mattn/go-sqlite3"
	"go.opentelemetry.io/otel"
	"go.opentelemetry.io/otel/trace"
)

func main() {
	// Create a sqlite3 driver with tracing and  breaker
	hook := sqlplus.NewMultiHook(
		sqltrace.NewTraceHook(sqltrace.Config{
			Name:           "sqlite3_trace",
			DataSourceName: "sqlite3",
			Endpoint:       "http://localhost:14268/api/traces",
			Sampler:        1,
			Batcher:        "jaeger",
		}),
		sqlbreaker.NewBreakerHook(breaker.NewBreaker()),
	)

	// register new driver
	sql.Register("sqlite3_trace", sqlplus.New(&sqlite3.SQLiteDriver{}, hook))
	defer sqltrace.StopAgent()

	// open database
	db, err := sql.Open("sqlite3_trace", "identifier.sqlite")
	if err != nil {
		panic(err)
	}

	tracer := otel.GetTracerProvider().Tracer("sqlite3_trace")
	ctx, span := tracer.Start(context.Background(),
		"test",
		trace.WithSpanKind(trace.SpanKindClient),
	)
	defer span.End()

	db.ExecContext(ctx, `CREATE TABLE  IF NOT EXISTS t
(
    age  integer,
    name TEXT
)`)
	db.ExecContext(ctx, "insert into t values (?,?)", 1, "chenquan")

	// transaction
	tx, err := db.BeginTx(ctx, nil)
	stmt, err := tx.PrepareContext(ctx, "select age+1 as age,name from t where age = ?;")
	stmt.QueryContext(ctx, 1)
	tx.Commit()

	rows, err := db.QueryContext(ctx, "select  age+1 as age,name from t;")
	for rows.Next() {
		var age int
		var name string
		err := rows.Scan(&age, &name)
		if err != nil {
			fmt.Println(err)
		}

		fmt.Println(age, name)
	}
}

⭐star

If you like or are using this project to learn or start your solution, please give it a star⭐. Thanks!

👐ecosystem

  • sqltrace:A low-code intrusion library that provides SQL tracing capabilities, suitable for any relational database (Sqlite3, MySQL, Oracle, SQL Server, PostgreSQL, TiDB, TDengine, etc.) and ORM libraries for various relational database (gorm, xorm, sqlx, etc.)
  • sqlplus: A sql enhancement tool library based on database/sql/driver

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewDefaultDriver

func NewDefaultDriver(d driver.Driver) driver.Driver

func NewDriver

func NewDriver(b breaker.Breaker, d driver.Driver) driver.Driver

Types

type Hook

type Hook struct {
	// contains filtered or unexported fields
}

func NewBreakerHook

func NewBreakerHook(brk breaker.Breaker) *Hook

func (*Hook) AfterBeginTx

func (h *Hook) AfterBeginTx(ctx context.Context, _ driver.TxOptions, dt driver.Tx, err error) (context.Context, driver.Tx, error)

func (*Hook) AfterClose added in v0.2.0

func (h *Hook) AfterClose(ctx context.Context, err error) (context.Context, error)

func (*Hook) AfterCommit

func (h *Hook) AfterCommit(ctx context.Context, err error) (context.Context, error)

func (*Hook) AfterConnect

func (h *Hook) AfterConnect(ctx context.Context, dc driver.Conn, err error) (context.Context, driver.Conn, error)

func (*Hook) AfterExecContext

func (h *Hook) AfterExecContext(ctx context.Context, _ string, _ []driver.NamedValue, dr driver.Result, err error) (context.Context, driver.Result, error)

func (*Hook) AfterPrepareContext

func (h *Hook) AfterPrepareContext(ctx context.Context, _ string, ds driver.Stmt, err error) (context.Context, driver.Stmt, error)

func (*Hook) AfterQueryContext

func (h *Hook) AfterQueryContext(ctx context.Context, _ string, _ []driver.NamedValue, rows driver.Rows, err error) (context.Context, driver.Rows, error)

func (*Hook) AfterRollback

func (h *Hook) AfterRollback(ctx context.Context, err error) (context.Context, error)

func (*Hook) AfterStmtExecContext

func (h *Hook) AfterStmtExecContext(ctx context.Context, _ string, _ []driver.NamedValue, r driver.Result, err error) (context.Context, driver.Result, error)

func (*Hook) AfterStmtQueryContext

func (h *Hook) AfterStmtQueryContext(ctx context.Context, _ string, _ []driver.NamedValue, rows driver.Rows, err error) (context.Context, driver.Rows, error)

func (*Hook) BeforeBeginTx

func (h *Hook) BeforeBeginTx(ctx context.Context, opts driver.TxOptions, _ error) (context.Context, driver.TxOptions, error)

func (*Hook) BeforeClose added in v0.2.0

func (h *Hook) BeforeClose(ctx context.Context, err error) (context.Context, error)

func (*Hook) BeforeCommit

func (h *Hook) BeforeCommit(ctx context.Context, err error) (context.Context, error)

func (*Hook) BeforeConnect

func (h *Hook) BeforeConnect(ctx context.Context, err error) (context.Context, error)

func (*Hook) BeforeExecContext

func (h *Hook) BeforeExecContext(ctx context.Context, query string, args []driver.NamedValue, _ error) (context.Context, string, []driver.NamedValue, error)

func (*Hook) BeforePrepareContext

func (h *Hook) BeforePrepareContext(ctx context.Context, query string, _ error) (context.Context, string, error)

func (*Hook) BeforeQueryContext

func (h *Hook) BeforeQueryContext(ctx context.Context, query string, args []driver.NamedValue, _ error) (context.Context, string, []driver.NamedValue, error)

func (*Hook) BeforeRollback

func (h *Hook) BeforeRollback(ctx context.Context, err error) (context.Context, error)

func (*Hook) BeforeStmtExecContext

func (h *Hook) BeforeStmtExecContext(ctx context.Context, _ string, args []driver.NamedValue, _ error) (context.Context, []driver.NamedValue, error)

func (*Hook) BeforeStmtQueryContext

func (h *Hook) BeforeStmtQueryContext(ctx context.Context, _ string, args []driver.NamedValue, _ error) (context.Context, []driver.NamedValue, error)

Directories

Path Synopsis
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL