goSqlite

package module
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Jan 27, 2026 License: MIT Imports: 13 Imported by: 0

README

[!NOTE] This README was generated by Claude Code, get the ZH version from here.

cover

go-sqlite

pkg license

Lightweight SQLite ORM built on sqlite3 driver and database/sql, featuring a consistent API with go-mysql.

Table of Contents

Features

  • Connection Pool Management: Support multiple database connection pools, managed by key
  • Builder Pattern: Chainable SQL query construction with Select/Where/Join/OrderBy/Limit/Offset
  • Complete CRUD Operations:
    • Insert series: Support conflict handling strategies (Ignore/Replace/Abort/Fail/Rollback)
    • Update series: Support Increase/Decrease/Toggle atomic operations
    • Select series: Support First/Count/Total extended queries
  • Where Conditions: Eq/NotEq/Gt/Lt/Ge/Le/In/NotIn/Null/NotNull/Between methods
  • Context Support: All major operations provide Context versions for timeout and cancellation
  • Auto State Clearing: Builder state automatically resets after each query execution
  • SQL Injection Protection: Built-in column name validation and parameterized queries

Installation

go get github.com/pardnchiu/go-sqlite

Usage

Initialize Connection
package main

import (
    goSqlite "github.com/pardnchiu/go-sqlite"
)

func main() {
    // Create database connection
    db, err := goSqlite.New(goSqlite.Config{
        Key:      "main",           // Connection pool key (optional, defaults to filename)
        Path:     "./data.db",      // Database path
        Lifetime: 3600,             // Connection lifetime in seconds
    })
    if err != nil {
        panic(err)
    }
    defer db.Close()
}
Create Table
builder, _ := db.DB("main")

err := builder.Table("users").Create(
    goSqlite.Column{Name: "id", Type: "INTEGER", IsPrimary: true, AutoIncrease: true},
    goSqlite.Column{Name: "name", Type: "TEXT", IsNullable: false},
    goSqlite.Column{Name: "email", Type: "TEXT", IsUnique: true},
    goSqlite.Column{Name: "age", Type: "INTEGER", Default: 0},
    goSqlite.Column{Name: "is_active", Type: "INTEGER", Default: 1},
)
Insert Data
// Basic insert
err := builder.Table("users").Insert(map[string]any{
    "name":  "John",
    "email": "john@example.com",
    "age":   25,
})

// Insert and get ID
id, err := builder.Table("users").InsertReturningID(map[string]any{
    "name":  "Jane",
    "email": "jane@example.com",
})

// Conflict handling
err = builder.Table("users").InsertConflict(goSqlite.Ignore, map[string]any{
    "name":  "John",
    "email": "john@example.com",
})
Query Data
// Query multiple rows
rows, err := builder.Table("users").
    Select("id", "name", "email").
    WhereGt("age", 18).
    OrderBy("name", goSqlite.Asc).
    Limit(10).
    Get()

// Query single row
row, err := builder.Table("users").
    WhereEq("id", 1).
    First()

// Count rows
count, err := builder.Table("users").
    WhereEq("is_active", 1).
    Count()

// Paginated query with total count (using Window Function)
rows, err := builder.Table("users").
    Total().
    Limit(10).
    Offset(20).
    Get()
Update Data
// Basic update
result, err := builder.Table("users").
    WhereEq("id", 1).
    Update(map[string]any{"name": "John Doe"})

// Increment field
result, err = builder.Table("users").
    WhereEq("id", 1).
    Increase("login_count", 1).
    Update()

// Toggle boolean
result, err = builder.Table("users").
    WhereEq("id", 1).
    Toggle("is_active").
    Update()
JOIN Queries
rows, err := builder.Table("orders").
    Select("orders.id", "users.name", "orders.total").
    Join("users", "users.id = orders.user_id").
    WhereGt("orders.total", 100).
    Get()

// LEFT JOIN
rows, err = builder.Table("users").
    LeftJoin("orders", "orders.user_id = users.id").
    Get()
Context Support
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

// Query
rows, err := builder.Table("users").GetContext(ctx)

// Insert
err = builder.Table("users").InsertContext(ctx, data)

// Update
result, err := builder.Table("users").
    WhereEq("id", 1).
    UpdateContext(ctx, data)

API Reference

Config
Field Type Description
Key string Connection pool identifier, defaults to filename
Path string SQLite database file path
Lifetime int Maximum connection lifetime in seconds
Column
Field Type Description
Name string Column name
Type string SQLite data type
IsPrimary bool Primary key flag
IsNullable bool Allow NULL values
AutoIncrease bool Auto increment
IsUnique bool Unique constraint
Default any Default value
ForeignKey *Foreign Foreign key configuration
Conflict Strategies
Constant Description
Ignore Skip insert on conflict
Replace Replace existing data
Abort Abort transaction (default)
Fail Fail but keep prior changes
Rollback Rollback entire transaction
Builder Methods
Method Description
Table(name) Set target table
Create(columns...) Create table
Select(columns...) Set query columns
Where(condition, args...) Add WHERE condition (AND)
OrWhere(condition, args...) Add WHERE condition (OR)
WhereEq/WhereNotEq/WhereGt/WhereLt/WhereGe/WhereLe Comparison conditions
WhereIn/WhereNotIn IN conditions
WhereNull/WhereNotNull NULL checks
WhereBetween BETWEEN range
Join(table, on) INNER JOIN
LeftJoin(table, on) LEFT JOIN
OrderBy(column, direction) Sorting
Limit(num) / Offset(num) Pagination
Total() Enable Window Function for total count
Get() / GetContext(ctx) Execute query, return multiple rows
First() / FirstContext(ctx) Execute query, return single row
Count() / CountContext(ctx) Count rows
Insert(data) / InsertContext(ctx, data) Insert data
InsertReturningID(data) Insert and return ID
InsertConflict(conflict, data) Insert with conflict handling
Update(data) / UpdateContext(ctx, data) Update data
Increase(column, num) Increment field value
Decrease(column, num) Decrement field value
Toggle(column) Toggle boolean value

License

MIT License

Author

邱敬幃 Pardn Chiu

Stars

Star


©️ 2026 邱敬幃 Pardn Chiu

Documentation

Index

Constants

View Source
const (
	Ignore conflict = iota
	Replace
	Abort
	Fail
	Rollback
)
View Source
const (
	Asc direction = iota
	Desc
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Builder

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

func NewBuilder

func NewBuilder(db *sql.DB) *Builder

func (*Builder) Conflict

func (b *Builder) Conflict(conflict conflict) *Builder

func (*Builder) Count

func (b *Builder) Count() (int64, error)

func (*Builder) CountContext

func (b *Builder) CountContext(ctx context.Context) (int64, error)

func (*Builder) Create

func (b *Builder) Create(columns ...Column) error

func (*Builder) Decrease

func (b *Builder) Decrease(column string, num ...int) *Builder

func (*Builder) First

func (b *Builder) First() (*sql.Row, error)

func (*Builder) FirstContext

func (b *Builder) FirstContext(ctx context.Context) (*sql.Row, error)

func (*Builder) Get

func (b *Builder) Get() (*sql.Rows, error)

func (*Builder) GetContext

func (b *Builder) GetContext(ctx context.Context) (*sql.Rows, error)

func (*Builder) GetWithTotal

func (b *Builder) GetWithTotal() (*sql.Rows, error)

func (*Builder) GetWithTotalContext

func (b *Builder) GetWithTotalContext(ctx context.Context) (*sql.Rows, error)

func (*Builder) Increase

func (b *Builder) Increase(column string, num ...int) *Builder

func (*Builder) Insert

func (b *Builder) Insert(data ...map[string]any) error

func (*Builder) InsertConflict

func (b *Builder) InsertConflict(conflict conflict, data ...map[string]any) error

! WILL BE DEPRECATED in v1.0.0

func (*Builder) InsertConflictReturningID

func (b *Builder) InsertConflictReturningID(conflict conflict, data ...map[string]any) (int64, error)

! WILL BE DEPRECATED in v1.0.0

func (*Builder) InsertContexConflict

func (b *Builder) InsertContexConflict(ctx context.Context, conflict conflict, data ...map[string]any) error

! WILL BE DEPRECATED in v1.0.0

func (*Builder) InsertContext

func (b *Builder) InsertContext(ctx context.Context, data ...map[string]any) error

func (*Builder) InsertContextConflictReturningID

func (b *Builder) InsertContextConflictReturningID(ctx context.Context, conflict conflict, data ...map[string]any) (int64, error)

! WILL BE DEPRECATED in v1.0.0

func (*Builder) InsertContextReturningID

func (b *Builder) InsertContextReturningID(ctx context.Context, data ...map[string]any) (int64, error)

func (*Builder) InsertReturningID

func (b *Builder) InsertReturningID(data ...map[string]any) (int64, error)

func (*Builder) Join

func (b *Builder) Join(table, on string) *Builder

func (*Builder) LeftJoin

func (b *Builder) LeftJoin(table, on string) *Builder

func (*Builder) Limit

func (b *Builder) Limit(num ...int) *Builder

func (*Builder) Offset

func (b *Builder) Offset(num int) *Builder

func (*Builder) OrWhere

func (b *Builder) OrWhere(condition string, args ...any) *Builder

func (*Builder) OrWhereBetween

func (b *Builder) OrWhereBetween(column string, start, end any) *Builder

func (*Builder) OrWhereEq

func (b *Builder) OrWhereEq(column string, value any) *Builder

func (*Builder) OrWhereGe

func (b *Builder) OrWhereGe(column string, value any) *Builder

func (*Builder) OrWhereGt

func (b *Builder) OrWhereGt(column string, value any) *Builder

func (*Builder) OrWhereIn

func (b *Builder) OrWhereIn(column string, values []any) *Builder

func (*Builder) OrWhereLe

func (b *Builder) OrWhereLe(column string, value any) *Builder

func (*Builder) OrWhereLt

func (b *Builder) OrWhereLt(column string, value any) *Builder

func (*Builder) OrWhereNotEq

func (b *Builder) OrWhereNotEq(column string, value any) *Builder

func (*Builder) OrWhereNotIn

func (b *Builder) OrWhereNotIn(column string, values []any) *Builder

func (*Builder) OrWhereNotNull

func (b *Builder) OrWhereNotNull(column string) *Builder

func (*Builder) OrWhereNull

func (b *Builder) OrWhereNull(column string) *Builder

func (*Builder) OrderBy

func (b *Builder) OrderBy(column string, direction ...direction) *Builder

func (*Builder) Raw

func (b *Builder) Raw() *sql.DB

func (*Builder) Select

func (b *Builder) Select(columns ...string) *Builder

func (*Builder) Table

func (b *Builder) Table(name string) *Builder

func (*Builder) Toggle

func (b *Builder) Toggle(column string) *Builder

func (*Builder) Total

func (b *Builder) Total() *Builder

! WILL BE DEPRECATED in v1.0.0

func (*Builder) Update

func (b *Builder) Update(data ...map[string]any) (sql.Result, error)

func (*Builder) UpdateContext

func (b *Builder) UpdateContext(ctx context.Context, data ...map[string]any) (sql.Result, error)

func (*Builder) Where

func (b *Builder) Where(condition string, args ...any) *Builder

func (*Builder) WhereBetween

func (b *Builder) WhereBetween(column string, start, end any) *Builder

func (*Builder) WhereEq

func (b *Builder) WhereEq(column string, value any) *Builder

func (*Builder) WhereGe

func (b *Builder) WhereGe(column string, value any) *Builder

func (*Builder) WhereGt

func (b *Builder) WhereGt(column string, value any) *Builder

func (*Builder) WhereIn

func (b *Builder) WhereIn(column string, values []any) *Builder

func (*Builder) WhereLe

func (b *Builder) WhereLe(column string, value any) *Builder

func (*Builder) WhereLt

func (b *Builder) WhereLt(column string, value any) *Builder

func (*Builder) WhereNotEq

func (b *Builder) WhereNotEq(column string, value any) *Builder

func (*Builder) WhereNotIn

func (b *Builder) WhereNotIn(column string, values []any) *Builder

func (*Builder) WhereNotNull

func (b *Builder) WhereNotNull(column string) *Builder

func (*Builder) WhereNull

func (b *Builder) WhereNull(column string) *Builder

type Column

type Column struct {
	Name         string
	Type         string
	IsPrimary    bool
	IsNullable   bool
	AutoIncrease bool
	IsUnique     bool
	Default      any
	ForeignKey   *Foreign
}

type Config

type Config struct {
	Key      string `json:"key,omitempty"`
	Path     string `json:"path"`
	Lifetime int    `json:"lifetime,omitempty"` // sec
}

type Connector

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

func New

func New(c Config) (*Connector, error)

func (*Connector) Close

func (d *Connector) Close()

func (*Connector) DB

func (d *Connector) DB(key string) (*Builder, error)

func (*Connector) Exec

func (d *Connector) Exec(key, query string, args ...any) (sql.Result, error)

func (*Connector) ExecContext

func (d *Connector) ExecContext(ctx context.Context, key, query string, args ...any) (sql.Result, error)

func (*Connector) Query

func (d *Connector) Query(key, query string, args ...any) (*sql.Rows, error)

func (*Connector) QueryContext

func (d *Connector) QueryContext(ctx context.Context, key, query string, args ...any) (*sql.Rows, error)

type Foreign

type Foreign struct {
	Table  string
	Column string
}

type Join

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

type Where

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

Jump to

Keyboard shortcuts

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