API Reference
Complete reference for all lit functions and types.
Registration
RegisterModel
Registers a model with the default naming strategy.
func RegisterModel[T any](driver Driver)Parameters:
driver: Database driver (lit.PostgreSQL,lit.MySQL,lit.SQLite,lit.DuckDB, or a custom driver)
Example:
lit.RegisterModel[User](lit.PostgreSQL)RegisterDriver
Sets the default database driver for model registration.
func RegisterDriver(driver Driver)Parameters:
driver: Database driver (lit.PostgreSQL,lit.MySQL,lit.SQLite,lit.DuckDB, or a custom driver)
Example:
lit.RegisterDriver(lit.PostgreSQL)RegisterModelWithNaming
Registers a model with a custom naming strategy.
func RegisterModelWithNaming[T any](driver Driver, namingStrategy DbNamingStrategy)Parameters:
driver: Database drivernamingStrategy: Implementation ofDbNamingStrategy
Example:
lit.RegisterModelWithNaming[User](lit.PostgreSQL, MyNamingStrategy{})Query Functions
Select
Executes a query and returns all matching rows.
func Select[T any](ex Executor, query string, args ...any) ([]*T, error)Parameters:
ex: Database connection or transactionquery: SQL SELECT queryargs: Query parameters
Returns:
[]*T: Slice of pointers to resultserror: Any error that occurred
Example:
users, err := lit.Select[User](db, "SELECT id, name, email FROM users WHERE active = $1", true)SelectSingle
Executes a query and returns a single row or nil.
func SelectSingle[T any](ex Executor, query string, args ...any) (*T, error)Parameters:
ex: Database connection or transactionquery: SQL SELECT queryargs: Query parameters
Returns:
*T: Pointer to result, or nil if not founderror: Any error that occurred
Example:
user, err := lit.SelectSingle[User](db, "SELECT id, name, email FROM users WHERE id = $1", 123)SelectNamed
Parses :name placeholders and executes a SELECT returning all matching rows.
func SelectNamed[T any](ex Executor, query string, params map[string]any) ([]*T, error)Parameters:
ex: Database connection or transactionquery: SQL SELECT query with:nameplaceholdersparams: Map of parameter names to values
Returns:
[]*T: Slice of pointers to resultserror: Any error (including missing parameters)
Example:
users, err := lit.SelectNamed[User](db,
"SELECT * FROM users WHERE last_name = :last_name",
lit.P{"last_name": "Doe"})SelectSingleNamed
Parses :name placeholders and executes a SELECT returning a single row or nil.
func SelectSingleNamed[T any](ex Executor, query string, params map[string]any) (*T, error)Parameters:
ex: Database connection or transactionquery: SQL SELECT query with:nameplaceholdersparams: Map of parameter names to values
Returns:
*T: Pointer to result, or nil if not founderror: Any error (including missing parameters)
Example:
user, err := lit.SelectSingleNamed[User](db,
"SELECT * FROM users WHERE id = :id",
lit.P{"id": 123})SelectMultipleNative
Executes a query with manual row scanning.
func SelectMultipleNative[T any](
ex Executor,
mapLine func(*interface{ Scan(...any) error }, *T) error,
query string,
args ...any,
) ([]*T, error)Parameters:
ex: Database connection or transactionmapLine: Function to scan each rowquery: SQL SELECT queryargs: Query parameters
Example:
results, err := lit.SelectMultipleNative[Result](db,
func(scanner *interface{ Scan(...any) error }, r *Result) error {
return (*scanner).Scan(&r.Name, &r.Value)
},
"SELECT name, value FROM items")Mutation Functions
Insert
Inserts a record and returns the generated ID.
func Insert[T any](ex Executor, t *T) (int, error)Parameters:
ex: Database connection or transactiont: Pointer to the struct to insert
Returns:
int: Generated IDerror: Any error that occurred
Example:
id, err := lit.Insert(db, &user)InsertUuid
Inserts a record with an auto-generated UUID.
func InsertUuid[T any](ex Executor, t *T) (string, error)Parameters:
ex: Database connection or transactiont: Pointer to the struct to insert (Id field will be set)
Returns:
string: Generated UUIDerror: Any error that occurred
Example:
uuid, err := lit.InsertUuid(db, &session)InsertExistingUuid
Inserts a record with a pre-existing UUID.
func InsertExistingUuid[T any](ex Executor, t *T) errorParameters:
ex: Database connection or transactiont: Pointer to the struct to insert (Id must be set)
Returns:
error: Any error that occurred
Example:
err := lit.InsertExistingUuid(db, &session)InsertNative
Executes a manual INSERT query.
func InsertNative(ex Executor, query string, args ...any) (int, error)Parameters:
ex: Database connection or transactionquery: SQL INSERT queryargs: Query parameters
Returns:
int: Last inserted IDerror: Any error that occurred
Update
Updates a record with a WHERE clause.
func Update[T any](ex Executor, t *T, where string, args ...any) errorParameters:
ex: Database connection or transactiont: Pointer to the struct with updated valueswhere: WHERE clause (required, cannot be empty)args: WHERE clause parameters
Returns:
error: Any error that occurred
Example:
err := lit.Update(db, &user, "id = $1", user.Id)UpdateNamed
Updates a record with a named-parameter WHERE clause.
func UpdateNamed[T any](ex Executor, t *T, where string, params map[string]any) errorParameters:
ex: Database connection or transactiont: Pointer to the struct with updated valueswhere: WHERE clause with:nameplaceholders (required)params: Map of parameter names to values
Returns:
error: Any error (including missing parameters)
Example:
user.Email = "jane@example.com"
err := lit.UpdateNamed(db, &user, "id = :id", lit.P{"id": user.Id})UpdateNative
Executes a manual UPDATE query.
func UpdateNative(ex Executor, query string, args ...any) errorParameters:
ex: Database connection or transactionquery: SQL UPDATE queryargs: Query parameters
Delete
Executes a DELETE query.
func Delete(ex Executor, query string, args ...any) errorParameters:
ex: Database connection or transactionquery: SQL DELETE queryargs: Query parameters
Example:
err := lit.Delete(db, "DELETE FROM users WHERE id = $1", 123)DeleteNamed
Parses :name placeholders and executes a DELETE query.
func DeleteNamed(driver Driver, ex Executor, query string, params map[string]any) errorParameters:
driver: Database driver (required becauseDeleteis non-generic)ex: Database connection or transactionquery: SQL DELETE query with:nameplaceholdersparams: Map of parameter names to values
Returns:
error: Any error (including missing parameters)
Example:
err := lit.DeleteNamed(lit.PostgreSQL, db,
"DELETE FROM users WHERE id = :id",
lit.P{"id": 123})Named Parameter Parsing
ParseNamedQuery
Low-level parser that converts :name placeholders to driver-specific positional syntax.
func ParseNamedQuery(driver Driver, query string, params map[string]any) (string, []any, error)Parameters:
driver: AnyDriverimplementation (lit.PostgreSQL,lit.MySQL,lit.SQLite,lit.DuckDB, or a custom driver)query: SQL query with:nameplaceholdersparams: Map of parameter names to values
Returns:
string: Transformed query with positional placeholders[]any: Ordered argument sliceerror: Any error (unsupported driver, missing parameter)
Example:
query, args, err := lit.ParseNamedQuery(lit.PostgreSQL,
"SELECT * FROM users WHERE id = :id AND name = :name",
lit.P{"id": 1, "name": "John"})
// query = "SELECT * FROM users WHERE id = $1 AND name = $2"
// args = [1, "John"]ParseNamedQueryForModel
Like ParseNamedQuery but infers the driver from the model's registration.
func ParseNamedQueryForModel[T any](query string, params map[string]any) (string, []any, error)Parameters:
query: SQL query with:nameplaceholdersparams: Map of parameter names to values
Returns:
string: Transformed query with positional placeholders[]any: Ordered argument sliceerror: Any error (unregistered model, missing parameter)
Example:
query, args, err := lit.ParseNamedQueryForModel[User](
"SELECT * FROM users WHERE id = :id",
lit.P{"id": 1})Helper Functions
JoinForIn
Creates a comma-separated string of integers for IN clauses.
func JoinForIn(ids []int) stringExample:
ids := []int{1, 2, 3}
query := "SELECT * FROM users WHERE id IN (" + lit.JoinForIn(ids) + ")"
// Result: SELECT * FROM users WHERE id IN (1,2,3)JoinStringForIn
Creates parameterized placeholders for IN clauses.
func JoinStringForIn[T any](offset int, params []string) stringParameters:
offset: Starting parameter number (for PostgreSQL)params: Slice of values (used to determine count)
Example:
emails := []string{"a@test.com", "b@test.com"}
placeholders := lit.JoinStringForIn[User](0, emails)
// PostgreSQL: $1,$2
// MySQL: ?,?JoinStringForInWithDriver
Creates parameterized placeholders for a specific driver.
func JoinStringForInWithDriver(driver Driver, offset int, count int) stringExample:
placeholders := lit.JoinStringForInWithDriver(lit.PostgreSQL, 2, 3)
// Result: $3,$4,$5Types
P
Shorthand type alias for named parameter maps.
type P = map[string]anyP is a true alias (using =), so it is fully interchangeable with map[string]any — no conversion needed.
Example:
// Instead of map[string]any{"id": 1}
users, err := lit.SelectNamed[User](db,
"SELECT * FROM users WHERE id = :id",
lit.P{"id": 1})Driver
Interface that database drivers must implement. lit provides four built-in drivers: lit.PostgreSQL, lit.MySQL, lit.SQLite, and lit.DuckDB. You can also implement your own — see Custom Drivers.
type Driver interface {
Name() string
InsertUpdateQueryGenerator
InsertAndGetId(ex Executor, query string, args ...any) (int, error)
Placeholder(argIndex int) string
SupportsBackslashEscape() bool
RenumberWhereClause(where string, offset int) string
JoinStringForIn(offset int, count int) string
}The embedded InsertUpdateQueryGenerator interface adds two additional methods:
type InsertUpdateQueryGenerator interface {
GenerateInsertQuery(tableName string, columnKeys []string, hasIntId bool) (string, []string)
GenerateUpdateQuery(tableName string, columnKeys []string) string
}Built-in drivers:
var PostgreSQL Driver = &pgDriver{}
var MySQL Driver = &mysqlDriver{}
var SQLite Driver = &sqliteDriver{}
var DuckDB Driver = &duckdbDriver{}Executor
Interface for database operations (implemented by *sql.DB and *sql.Tx).
type Executor interface {
Exec(query string, args ...any) (sql.Result, error)
Query(query string, args ...any) (*sql.Rows, error)
QueryRow(query string, args ...any) *sql.Row
}DbNamingStrategy
Interface for custom naming conventions.
type DbNamingStrategy interface {
GetTableNameFromStructName(string) string
GetColumnNameFromStructName(string) string
}DefaultDbNamingStrategy
Built-in naming strategy (CamelCase → snake_case).
type DefaultDbNamingStrategy struct{}FieldMap
Cached metadata for a registered model.
type FieldMap struct {
ColumnsMap map[string]int // Column name → field index
ColumnKeys []string // Ordered column names
HasIntId bool // Whether id is an integer
InsertQuery string // Pre-built INSERT query
UpdateQuery string // Pre-built UPDATE query (without WHERE)
InsertColumns []string // Columns used in INSERT
Driver Driver // Database driver
}