sql

package
v1.26.0 Latest Latest
Warning

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

Go to latest
Published: Jun 12, 2026 License: MIT Imports: 8 Imported by: 0

Documentation

Overview

Package sql wraps a database/sql driver so calls are subject to chaos. Register a chaos driver name that points at an existing registered driver, then sql.Open chaos name.

Example:

chaossql.Register("chaos:postgres", "postgres", eng)
db, _ := sql.Open("chaos:postgres", dsn)

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Register

func Register(driverName, wrappedDriverName string, eng *engine.Engine)

Register registers a driver that wraps wrappedDriverName with chaos. The wrapped driver must already be registered with database/sql. Subsequent calls to sql.Open(driverName, dsn) get chaos-wrapped driver.

Panics if driverName is already registered (per database/sql semantics).

Example
//go:build !chaos_off

package main

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

	chaossql "github.com/RomanAgaltsev/chaotic/adapter/sql"
	"github.com/RomanAgaltsev/chaotic/engine"
	"github.com/RomanAgaltsev/chaotic/fault"
)

func init() { sql.Register("example-fake", fakeDriver{}) }

func main() {
	eng := engine.New().AddRule(engine.NewRule(
		engine.MatchKind(engine.OpSQL),
		engine.Times(1),
		engine.WithFault(fault.Error(errors.New("deadlock detected"))),
	).Named("db-flap"))

	// Wrap the already-registered "example-fake" driver with chaos.
	chaossql.Register("chaos:example-fake", "example-fake", eng)
	db, err := sql.Open("chaos:example-fake", "")
	if err != nil {
		fmt.Println("open:", err)
		return
	}
	defer db.Close()

	_, err1 := db.ExecContext(context.Background(), "UPDATE accounts SET balance = balance - 1")
	fmt.Println("exec 1 error:", err1)

	_, err2 := db.ExecContext(context.Background(), "UPDATE accounts SET balance = balance - 1")
	fmt.Println("exec 2 error:", err2)
}
Output:
exec 1 error: deadlock detected
exec 2 error: <nil>

Types

This section is empty.

Jump to

Keyboard shortcuts

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