Documentation
¶
Index ¶
- func HealthMiddleware(hc *HealthChecker) func(next func()) func()
- func RunSeeder(db *sql.DB, seeder Seeder) error
- type BaseSeeder
- type ConnectionMonitor
- type ConnectionStats
- type DB
- type Factory
- type Faker
- func (fake *Faker) Boolean() func(int) interface{}
- func (fake *Faker) Email() func(int) interface{}
- func (fake *Faker) Name() func(int) interface{}
- func (fake *Faker) Now() interface{}
- func (fake *Faker) RandomInt(min, max int) func(int) interface{}
- func (fake *Faker) Sequence(format string) func(int) interface{}
- type HealthChecker
- func (hc *HealthChecker) Check(ctx context.Context) *HealthStatus
- func (hc *HealthChecker) IsHealthy(ctx context.Context) bool
- func (hc *HealthChecker) MonitorHealth(ctx context.Context, interval time.Duration, callback func(*HealthStatus))
- func (hc *HealthChecker) QuickCheck(ctx context.Context) error
- func (hc *HealthChecker) WaitForHealthy(ctx context.Context, maxWait time.Duration) error
- type HealthStatus
- type Model
- func (m *Model) All(db *sql.DB) (*sql.Rows, error)
- func (m *Model) Create(db *sql.DB, data map[string]interface{}) (sql.Result, error)
- func (m *Model) Delete(db *sql.DB, id interface{}) (sql.Result, error)
- func (m *Model) Find(db *sql.DB, id interface{}) *sql.Row
- func (m *Model) HasSoftDelete() bool
- func (m *Model) PrimaryKey() string
- func (m *Model) Query(db *sql.DB) *QueryBuilder
- func (m *Model) Table() string
- func (m *Model) Update(db *sql.DB, id interface{}, data map[string]interface{}) (sql.Result, error)
- func (m *Model) WithPrimaryKey(pk string) *Model
- func (m *Model) WithSoftDelete() *Model
- type QueryBuilder
- func (qb *QueryBuilder) BelongsTo(relatedTable, foreignKey string, fkValue interface{}) *QueryBuilder
- func (qb *QueryBuilder) Chunk(size int, fn func(rows *sql.Rows) bool) error
- func (qb *QueryBuilder) ChunkByID(size int, column string, fn func(rows *sql.Rows) bool) error
- func (qb *QueryBuilder) Count() (int64, error)
- func (qb *QueryBuilder) Delete() (sql.Result, error)
- func (qb *QueryBuilder) Exists() (bool, error)
- func (qb *QueryBuilder) First() *sql.Row
- func (qb *QueryBuilder) ForceDelete() (sql.Result, error)
- func (qb *QueryBuilder) Get() (*sql.Rows, error)
- func (qb *QueryBuilder) GroupBy(columns ...string) *QueryBuilder
- func (qb *QueryBuilder) HasMany(relatedTable, foreignKey string, id interface{}) *QueryBuilder
- func (qb *QueryBuilder) Having(column, operator string, value interface{}) *QueryBuilder
- func (qb *QueryBuilder) Insert(data map[string]interface{}) (sql.Result, error)
- func (qb *QueryBuilder) Join(table, on string) *QueryBuilder
- func (qb *QueryBuilder) LeftJoin(table, on string) *QueryBuilder
- func (qb *QueryBuilder) Limit(count int) *QueryBuilder
- func (qb *QueryBuilder) Offset(count int) *QueryBuilder
- func (qb *QueryBuilder) OnlyTrashed() *QueryBuilder
- func (qb *QueryBuilder) OrWhere(column, operator string, value interface{}) *QueryBuilder
- func (qb *QueryBuilder) OrderBy(column, direction string) *QueryBuilder
- func (qb *QueryBuilder) Paginate(page, perPage int) *QueryBuilder
- func (qb *QueryBuilder) Raw(query string, params ...interface{}) (*sql.Rows, error)
- func (qb *QueryBuilder) RawExec(query string, params ...interface{}) (sql.Result, error)
- func (qb *QueryBuilder) Restore() (sql.Result, error)
- func (qb *QueryBuilder) RightJoin(table, on string) *QueryBuilder
- func (qb *QueryBuilder) Scope(scopes ...Scope) *QueryBuilder
- func (qb *QueryBuilder) Select(columns ...string) *QueryBuilder
- func (qb *QueryBuilder) SoftDelete() (sql.Result, error)
- func (qb *QueryBuilder) Table(table string) *QueryBuilder
- func (qb *QueryBuilder) ToSQL() (string, []interface{}, error)
- func (qb *QueryBuilder) Transaction(fn func(tx *QueryBuilder) error) error
- func (qb *QueryBuilder) Union(query *QueryBuilder) *QueryBuilder
- func (qb *QueryBuilder) UnionAll(query *QueryBuilder) *QueryBuilder
- func (qb *QueryBuilder) Update(data map[string]interface{}) (sql.Result, error)
- func (qb *QueryBuilder) Where(column, operator string, value interface{}) *QueryBuilder
- func (qb *QueryBuilder) WhereBetween(column string, start, end interface{}) *QueryBuilder
- func (qb *QueryBuilder) WhereIn(column string, values []interface{}) *QueryBuilder
- func (qb *QueryBuilder) WhereNotNull(column string) *QueryBuilder
- func (qb *QueryBuilder) WhereNull(column string) *QueryBuilder
- func (qb *QueryBuilder) WithTrashed() *QueryBuilder
- type Scope
- type Seeder
- type SeederRegistry
- type TxBeginner
- type UserSeeder
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func HealthMiddleware ¶
func HealthMiddleware(hc *HealthChecker) func(next func()) func()
HealthMiddleware creates HTTP middleware for database health checks
Types ¶
type BaseSeeder ¶
type BaseSeeder struct {
TableName string
}
BaseSeeder provides common functionality for seeders
func (*BaseSeeder) BulkInsert ¶
func (bs *BaseSeeder) BulkInsert(db *sql.DB, data []map[string]interface{}) error
BulkInsert performs bulk insertion of data
func (*BaseSeeder) DropAndRecreateTable ¶
func (bs *BaseSeeder) DropAndRecreateTable(db *sql.DB, createSQL string) error
DropAndRecreateTable drops and recreates a table (requires table schema)
func (*BaseSeeder) TruncateTable ¶
func (bs *BaseSeeder) TruncateTable(db *sql.DB) error
TruncateTable clears all data from a table
type ConnectionMonitor ¶
type ConnectionMonitor struct {
// contains filtered or unexported fields
}
ConnectionMonitor provides advanced connection monitoring
func NewConnectionMonitor ¶
func NewConnectionMonitor(db *sql.DB, maxConnections int, warningThreshold float64) *ConnectionMonitor
NewConnectionMonitor creates a new connection monitor
func (*ConnectionMonitor) GetConnectionStats ¶
func (cm *ConnectionMonitor) GetConnectionStats() *ConnectionStats
GetConnectionStats returns detailed connection statistics
func (*ConnectionMonitor) OptimizeConnections ¶
func (cm *ConnectionMonitor) OptimizeConnections() []string
OptimizeConnections suggests connection pool optimizations
type ConnectionStats ¶
type ConnectionStats struct {
OpenConnections int `json:"open_connections"`
InUse int `json:"in_use"`
Idle int `json:"idle"`
MaxOpenConnections int `json:"max_open_connections"`
MaxIdleConnections int `json:"max_idle_connections"`
MaxLifetime string `json:"max_lifetime"`
MaxIdleTime string `json:"max_idle_time"`
UtilizationPercent float64 `json:"utilization_percent"`
Warning string `json:"warning,omitempty"`
}
ConnectionStats provides detailed connection statistics
type DB ¶
type DB interface {
Query(query string, args ...interface{}) (*sql.Rows, error)
QueryRow(query string, args ...interface{}) *sql.Row
Exec(query string, args ...interface{}) (sql.Result, error)
Prepare(query string) (*sql.Stmt, error)
}
DB is an interface that both *sql.DB and *sql.Tx implement This allows QueryBuilder to work with both regular queries and transactions
type Factory ¶
type Factory struct {
// contains filtered or unexported fields
}
Factory provides a fluent interface for creating seed data
type Faker ¶
type Faker struct{}
Common faker functions for generating test data
type HealthChecker ¶
type HealthChecker struct {
// contains filtered or unexported fields
}
HealthChecker provides database health monitoring functionality
func NewHealthChecker ¶
func NewHealthChecker(db *sql.DB, timeout time.Duration) *HealthChecker
NewHealthChecker creates a new database health checker
func (*HealthChecker) Check ¶
func (hc *HealthChecker) Check(ctx context.Context) *HealthStatus
Check performs comprehensive health checks on the database
func (*HealthChecker) IsHealthy ¶
func (hc *HealthChecker) IsHealthy(ctx context.Context) bool
IsHealthy returns true if the database is healthy
func (*HealthChecker) MonitorHealth ¶
func (hc *HealthChecker) MonitorHealth(ctx context.Context, interval time.Duration, callback func(*HealthStatus))
MonitorHealth continuously monitors database health
func (*HealthChecker) QuickCheck ¶
func (hc *HealthChecker) QuickCheck(ctx context.Context) error
QuickCheck performs a basic ping test
func (*HealthChecker) WaitForHealthy ¶
WaitForHealthy waits for the database to become healthy
type HealthStatus ¶
type HealthStatus struct {
Status string `json:"status"`
ResponseTime time.Duration `json:"response_time"`
ConnectionsOpen int `json:"connections_open"`
ConnectionsInUse int `json:"connections_in_use"`
ConnectionsIdle int `json:"connections_idle"`
MaxConnections int `json:"max_connections"`
Errors []string `json:"errors,omitempty"`
Checks map[string]string `json:"checks"`
Timestamp time.Time `json:"timestamp"`
DatabaseType string `json:"database_type"`
Version string `json:"version"`
}
HealthStatus represents the health status of the database
type Model ¶
type Model struct {
// contains filtered or unexported fields
}
Model represents a database table with configuration options. It provides a type-safe way to define and query database tables without runtime reflection.
func NewModel ¶
NewModel creates a new Model for the given table name. The table name is validated to prevent SQL injection.
func (*Model) Delete ¶
Delete performs a hard delete for the given ID. For soft delete, use SoftDelete instead.
func (*Model) HasSoftDelete ¶
HasSoftDelete returns whether soft delete is enabled.
func (*Model) PrimaryKey ¶
PrimaryKey returns the primary key column name.
func (*Model) Query ¶
func (m *Model) Query(db *sql.DB) *QueryBuilder
Query creates a new QueryBuilder for this model. If soft delete is enabled, it automatically adds WHERE deleted_at IS NULL.
func (*Model) WithPrimaryKey ¶
WithPrimaryKey sets a custom primary key column name.
func (*Model) WithSoftDelete ¶
WithSoftDelete enables soft delete support for this model. When enabled, Query() will automatically exclude soft-deleted records by adding a WHERE deleted_at IS NULL condition.
type QueryBuilder ¶
type QueryBuilder struct {
// contains filtered or unexported fields
}
QueryBuilder provides a fluent interface for building SQL queries
func Active ¶
func Active(qb *QueryBuilder) *QueryBuilder
Active is a predefined scope that filters for active records.
func Draft ¶
func Draft(qb *QueryBuilder) *QueryBuilder
Draft is a predefined scope for draft/unpublished content.
func NewQueryBuilder ¶
func NewQueryBuilder(db *sql.DB) *QueryBuilder
NewQueryBuilder creates a new query builder instance
func Oldest ¶
func Oldest(qb *QueryBuilder) *QueryBuilder
Oldest is a predefined scope that orders by created_at ASC.
func Published ¶
func Published(qb *QueryBuilder) *QueryBuilder
Published is a predefined scope for published content.
func Recent ¶
func Recent(qb *QueryBuilder) *QueryBuilder
Recent is a predefined scope that orders by created_at DESC.
func (*QueryBuilder) BelongsTo ¶
func (qb *QueryBuilder) BelongsTo(relatedTable, foreignKey string, fkValue interface{}) *QueryBuilder
BelongsTo returns a query builder for the parent in a one-to-many relationship. Example: post.BelongsTo("users", "user_id", post.UserID) returns the user for a post.
func (*QueryBuilder) Chunk ¶
Chunk processes query results in chunks of the specified size. The callback function receives each chunk of rows. Return false from the callback to stop processing.
Example:
db.Table("users").Chunk(100, func(rows *sql.Rows) bool {
for rows.Next() {
// process row
}
return true // continue processing
})
func (*QueryBuilder) ChunkByID ¶
ChunkByID processes query results by ID in batches. This is more efficient for large tables as it uses indexed ID lookups.
func (*QueryBuilder) Count ¶
func (qb *QueryBuilder) Count() (int64, error)
Count returns the count of rows
func (*QueryBuilder) Delete ¶
func (qb *QueryBuilder) Delete() (sql.Result, error)
Delete builds and executes a DELETE query
func (*QueryBuilder) Exists ¶
func (qb *QueryBuilder) Exists() (bool, error)
Exists checks if any rows exist
func (*QueryBuilder) First ¶
func (qb *QueryBuilder) First() *sql.Row
First executes the query and returns the first row
func (*QueryBuilder) ForceDelete ¶
func (qb *QueryBuilder) ForceDelete() (sql.Result, error)
ForceDelete permanently deletes rows, ignoring soft delete. This is an alias for Delete() but makes the intent explicit.
func (*QueryBuilder) Get ¶
func (qb *QueryBuilder) Get() (*sql.Rows, error)
Get executes the query and returns all rows
func (*QueryBuilder) GroupBy ¶
func (qb *QueryBuilder) GroupBy(columns ...string) *QueryBuilder
GroupBy adds a GROUP BY clause
func (*QueryBuilder) HasMany ¶
func (qb *QueryBuilder) HasMany(relatedTable, foreignKey string, id interface{}) *QueryBuilder
HasMany returns a query builder for a one-to-many relationship. Example: user.HasMany("posts", "user_id", userID) returns all posts for a user.
func (*QueryBuilder) Having ¶
func (qb *QueryBuilder) Having(column, operator string, value interface{}) *QueryBuilder
Having adds a HAVING condition
func (*QueryBuilder) Insert ¶
func (qb *QueryBuilder) Insert(data map[string]interface{}) (sql.Result, error)
Insert builds and executes an INSERT query
func (*QueryBuilder) Join ¶
func (qb *QueryBuilder) Join(table, on string) *QueryBuilder
Join adds an INNER JOIN
func (*QueryBuilder) LeftJoin ¶
func (qb *QueryBuilder) LeftJoin(table, on string) *QueryBuilder
LeftJoin adds a LEFT JOIN
func (*QueryBuilder) Limit ¶
func (qb *QueryBuilder) Limit(count int) *QueryBuilder
Limit sets the LIMIT clause
func (*QueryBuilder) Offset ¶
func (qb *QueryBuilder) Offset(count int) *QueryBuilder
Offset sets the OFFSET clause
func (*QueryBuilder) OnlyTrashed ¶
func (qb *QueryBuilder) OnlyTrashed() *QueryBuilder
OnlyTrashed returns only soft-deleted records.
func (*QueryBuilder) OrWhere ¶
func (qb *QueryBuilder) OrWhere(column, operator string, value interface{}) *QueryBuilder
OrWhere adds an OR WHERE condition
func (*QueryBuilder) OrderBy ¶
func (qb *QueryBuilder) OrderBy(column, direction string) *QueryBuilder
OrderBy adds an ORDER BY clause
func (*QueryBuilder) Paginate ¶
func (qb *QueryBuilder) Paginate(page, perPage int) *QueryBuilder
Paginate adds pagination to the query
func (*QueryBuilder) Raw ¶
func (qb *QueryBuilder) Raw(query string, params ...interface{}) (*sql.Rows, error)
Raw executes a raw SQL query
func (*QueryBuilder) RawExec ¶
func (qb *QueryBuilder) RawExec(query string, params ...interface{}) (sql.Result, error)
RawExec executes a raw SQL statement
func (*QueryBuilder) Restore ¶
func (qb *QueryBuilder) Restore() (sql.Result, error)
Restore clears the deleted_at timestamp, effectively "undeleting" the row.
func (*QueryBuilder) RightJoin ¶
func (qb *QueryBuilder) RightJoin(table, on string) *QueryBuilder
RightJoin adds a RIGHT JOIN
func (*QueryBuilder) Scope ¶
func (qb *QueryBuilder) Scope(scopes ...Scope) *QueryBuilder
Scope applies one or more scopes to the query builder. Scopes are reusable query modifications.
Example:
Active := func(qb *QueryBuilder) *QueryBuilder {
return qb.Where("active", "=", true)
}
users, _ := db.Table("users").Scope(Active).Get()
func (*QueryBuilder) Select ¶
func (qb *QueryBuilder) Select(columns ...string) *QueryBuilder
Select specifies the columns to select
func (*QueryBuilder) SoftDelete ¶
func (qb *QueryBuilder) SoftDelete() (sql.Result, error)
SoftDelete sets deleted_at to current timestamp instead of deleting the row. This is useful for preserving data while marking it as deleted.
func (*QueryBuilder) Table ¶
func (qb *QueryBuilder) Table(table string) *QueryBuilder
Table sets the table name for the query
func (*QueryBuilder) ToSQL ¶
func (qb *QueryBuilder) ToSQL() (string, []interface{}, error)
ToSQL builds the SQL query string and returns it with parameters
func (*QueryBuilder) Transaction ¶
func (qb *QueryBuilder) Transaction(fn func(tx *QueryBuilder) error) error
Transaction executes a function within a database transaction. If the function returns an error, the transaction is rolled back. If the function returns nil, the transaction is committed.
func (*QueryBuilder) Union ¶
func (qb *QueryBuilder) Union(query *QueryBuilder) *QueryBuilder
Union adds a UNION clause
func (*QueryBuilder) UnionAll ¶
func (qb *QueryBuilder) UnionAll(query *QueryBuilder) *QueryBuilder
UnionAll adds a UNION ALL clause
func (*QueryBuilder) Update ¶
func (qb *QueryBuilder) Update(data map[string]interface{}) (sql.Result, error)
Update builds and executes an UPDATE query
func (*QueryBuilder) Where ¶
func (qb *QueryBuilder) Where(column, operator string, value interface{}) *QueryBuilder
Where adds a WHERE condition
func (*QueryBuilder) WhereBetween ¶
func (qb *QueryBuilder) WhereBetween(column string, start, end interface{}) *QueryBuilder
WhereBetween adds a BETWEEN condition
func (*QueryBuilder) WhereIn ¶
func (qb *QueryBuilder) WhereIn(column string, values []interface{}) *QueryBuilder
WhereIn adds a WHERE IN condition
func (*QueryBuilder) WhereNotNull ¶
func (qb *QueryBuilder) WhereNotNull(column string) *QueryBuilder
WhereNotNull adds a WHERE column IS NOT NULL condition
func (*QueryBuilder) WhereNull ¶
func (qb *QueryBuilder) WhereNull(column string) *QueryBuilder
WhereNull adds a WHERE column IS NULL condition
func (*QueryBuilder) WithTrashed ¶
func (qb *QueryBuilder) WithTrashed() *QueryBuilder
WithTrashed includes soft-deleted records in the query results. Use this when you need to access deleted records.
type Scope ¶
type Scope func(*QueryBuilder) *QueryBuilder
Scope is a function that modifies a QueryBuilder. Use scopes to create reusable query constraints.
type SeederRegistry ¶
type SeederRegistry struct {
// contains filtered or unexported fields
}
SeederRegistry manages all registered seeders
func CreateSeederRegistry ¶
func CreateSeederRegistry() *SeederRegistry
CreateSeederRegistry creates and registers common seeders
func NewSeederRegistry ¶
func NewSeederRegistry() *SeederRegistry
NewSeederRegistry creates a new seeder registry
func (*SeederRegistry) ListSeeders ¶
func (sr *SeederRegistry) ListSeeders() []string
ListSeeders returns all registered seeder names
func (*SeederRegistry) Register ¶
func (sr *SeederRegistry) Register(name string, seeder Seeder)
Register adds a seeder to the registry
type TxBeginner ¶
TxBeginner is an interface for types that can begin a transaction