sqlbreaker

package module
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Sep 15, 2022 License: Apache-2.0 Imports: 6 Imported by: 0

README

sqlbreaker

Godoc Go Report Card Release codecov Download GitHub

A low-code intrusion SQL breaker library, suitable for any relational database (Sqlite3, MySQL, Oracle, SQL Server, PostgreSQL, TiDB, 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!

👐ecology

  • sqltrace: A low-code intrusion SQL tracing library, suitable for any relational database (Sqlite3, MySQL, Oracle, SQL Server, PostgreSQL, TiDB, 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) 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) 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