sql
is a Go library designed to simplify database interactions, migrations, and query management.
The ConditionBuilder provide functions for dynamically constructing SQL conditions.
import "github.com/go-universal/sql/query"
func main() {
cond := query.NewCondition(query.NumbericResolver)
cond.And("name = ?", "John").
AndClosure("age > ? AND age < ?", 9, 31).
OrIf(false, "age IS NULL").
OrClosureIf(true, "membership @in", "admin", "manager", "accountant")
// Result: "name = $1 AND (age > $2 AND age < $3) OR (membership IN ($4, $5, $6))"
}
The query
package provides tools for managing and generating SQL queries.
import (
"github.com/go-universal/sql/query"
"github.com/go-universal/fs"
)
func main() {
queriesFS := fs.NewDir("database/queries")
queryManager, _err_ := query.NewQueryManager(fs, query.WithRoot("database"))
usersList := queryManager.Get("queries/users/users_list")
usersTrash := queryManager.Get("queries/users/deleted users")
customers, exists := queryManager.Find("queries/customers/list")
customers, exists := queryManager.Find("queries/customers/deleted") // "", false
}
Query files style:
-- users.sql
-- { query: users_list }
SELECT * FROM users WHERE `deleted_at` IS NULL AND `name` LIKE ?;
-- { query: deleted users }
SELECT * FROM users WHERE deleted_at IS NOT NULL;
-- customers.sql
-- { query: list }
SELECT * from customers;
The postgres
package provides tools for constructing and executing SQL commands specifically for PostgreSQL databases. Query placeholders must ?
.
package main
import (
"context"
"github.com/go-universal/sql/postgres"
"github.com/jackc/pgx/v5/pgconn"
)
func main() {
ctx := context.Background()
config := postgres.NewConfig().
Host("localhost").
Port(5432).
User("postgres").
Password("password").
Database("test").
SSLMode("disable").
MinConns(2)
conn, err := postgres.New(
ctx, config.Build(),
func(c *pgxpool.Config) { c.MaxConns = 7 },
)
defer conn.Close(ctx)
cmd := postgres.NewCmd(conn)
result, err := cmd.Command("INSERT INTO users (name) VALUES (?)").Exec(ctx, "John Doe")
}
The mysql
package provides tools for constructing and executing SQL commands specifically for MySQL databases.
package main
import (
"context"
"github.com/go-universal/sql/mysql"
)
func main() {
conn, err := mysql.New(
context.Background(),
mysql.NewConfig().Database("test").Password("root").Build(),
)
if err != nil {
log.Fatal(err)
}
cmd := mysql.NewCmd(conn)
result, err := cmd.Command("INSERT INTO users (name) VALUES (?)").Exec(context.Background(), "John Doe")
}
The migration
package provides tools for managing database migrations by stage.
package main
import (
"log"
"github.com/go-universal/fs"
"github.com/go-universal/sql/migration"
"github.com/go-universal/sql/mysql"
)
func main() {
conn := CreateConnection()
fs := CreateFS()
mig, err := migration.NewMigration(
migration.NewMySQLSource(conn),
fs,
migration.WithRoot("migrations"),
)
err := mig.Up([]string{"table", "index", "seed"})
if err != nil {
log.Fatal(err)
}
}
Migration files style:
-- 1741791024-create-users-table.sql
-- { up: table } table is sectin name
CREATE TABLE IF NOT EXISTS ...
-- { down: table }
-- { up: index }
...
-- { down: index }
...
-- { up: seed }
...
-- { down: seed }
...
This library is licensed under the ISC License. See the LICENSE file for details.