https://github.com/biyonik/go-fluent-sql
A fluent, type-safe SQL query builder for Go with Laravel-inspired syntax.
https://github.com/biyonik/go-fluent-sql
go golang golang-library mysql orm postgresql sql
Last synced: 5 months ago
JSON representation
A fluent, type-safe SQL query builder for Go with Laravel-inspired syntax.
- Host: GitHub
- URL: https://github.com/biyonik/go-fluent-sql
- Owner: biyonik
- License: mit
- Created: 2025-11-30T19:58:11.000Z (7 months ago)
- Default Branch: master
- Last Pushed: 2025-12-01T12:49:53.000Z (7 months ago)
- Last Synced: 2025-12-03T05:34:26.905Z (7 months ago)
- Topics: go, golang, golang-library, mysql, orm, postgresql, sql
- Language: Go
- Homepage:
- Size: 89.8 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
README
# go-fluent-sql
[](https://go.dev/)
[](LICENSE)
[](https://goreportcard.com/report/github.com/biyonik/go-fluent-sql)
[](https://codecov.io/gh/biyonik/go-fluent-sql)
[](https://pkg.go.dev/github.com/biyonik/go-fluent-sql)
A fluent, type-safe SQL query builder for Go with Laravel-inspired syntax.
## Features
- ๐ **Fluent API** - Chain methods for readable queries
- ๐ก๏ธ **SQL Injection Protection** - Prepared statements & identifier validation
- ๐ฏ **Type Safety** - Compile-time checks where possible
- ๐ **High Performance** - Minimal allocations, cached reflection
- ๐ **Multi-Database** - MySQL, PostgreSQL (coming soon)
- ๐ฆ **Zero Config** - Works out of the box
- ๐งช **Well Tested** - Comprehensive test coverage
## Installation
```bash
go get github.com/biyonik/go-fluent-sql
```
## Quick Start
```go
package main
import (
"context"
"log"
fluentsql "github.com/biyonik/go-fluent-sql"
)
func main() {
// Connect to database
db, err := fluentsql.Connect("user:password@tcp(localhost:3306)/dbname")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// Create query builder
qb := fluentsql.New(db)
// Select query
var users []User
err = qb.Table("users").
Select("id", "name", "email").
Where("status", "=", "active").
WhereIn("role", []interface{}{"admin", "moderator"}).
OrderBy("created_at", "DESC").
Limit(10).
Get(&users)
// Insert
result, err := qb.Table("users").Insert(map[string]interface{}{
"name": "John Doe",
"email": "john@example.com",
})
// Update
result, err = qb.Table("users").
Where("id", "=", 1).
Update(map[string]interface{}{
"status": "inactive",
})
// Delete
result, err = qb.Table("users").
Where("status", "=", "banned").
Delete()
}
type User struct {
ID int `db:"id"`
Name string `db:"name"`
Email string `db:"email"`
}
```
## Documentation
๐ **[Full Documentation](https://pkg.go.dev/github.com/biyonik/go-fluent-sql)**
### Query Building
```go
// Basic WHERE
qb.Where("column", "=", value)
qb.OrWhere("column", "!=", value)
// WHERE IN
qb.WhereIn("status", []interface{}{"active", "pending"})
qb.WhereNotIn("role", []interface{}{"banned"})
// WHERE BETWEEN
qb.WhereBetween("age", 18, 65)
qb.WhereNotBetween("score", 0, 50)
// WHERE NULL
qb.WhereNull("deleted_at")
qb.WhereNotNull("email_verified_at")
// Date queries
qb.WhereDate("created_at", "2024-01-15")
qb.WhereYear("created_at", 2024)
qb.WhereMonth("created_at", 12)
// Ordering
qb.OrderBy("created_at", "DESC")
// Pagination
qb.Limit(10).Offset(20)
```
### Transactions
```go
tx, err := fluentsql.BeginTransaction(db)
if err != nil {
return err
}
// Use transaction
err = tx.Table("users").Where("id", "=", 1).Update(data)
if err != nil {
tx.Rollback()
return err
}
err = tx.Table("logs").Insert(logData)
if err != nil {
tx.Rollback()
return err
}
return tx.Commit()
```
### Migrations
```go
migrator := migration.NewMigrator(db, migration.NewMySQLGrammar())
err := migrator.CreateTable("users", func(t *migration.Blueprint) {
t.ID()
t.String("name", 255)
t.String("email", 255).Unique()
t.String("password", 255)
t.Timestamps()
t.SoftDeletes()
})
```
## Benchmarks
```
BenchmarkSelect-8 500000 2340 ns/op 1024 B/op 15 allocs/op
BenchmarkWhere-8 800000 1456 ns/op 512 B/op 8 allocs/op
BenchmarkInsert-8 600000 1892 ns/op 768 B/op 12 allocs/op
```
## Contributing
Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md) first.
```bash
# Clone the repo
git clone https://github.com/biyonik/go-fluent-sql.git
# Install dependencies
make deps
# Run tests
make test
# Run linter
make lint
```
## License
MIT License - see [LICENSE](LICENSE) for details.
## Related Projects
- [go-fluent-validator](https://github.com/biyonik/go-fluent-validator) - Fluent validation library for Go
## Acknowledgments
Inspired by Laravel's Eloquent and Query Builder.