https://github.com/benehiko/sqlbuilder
SQL generator
https://github.com/benehiko/sqlbuilder
Last synced: about 2 months ago
JSON representation
SQL generator
- Host: GitHub
- URL: https://github.com/benehiko/sqlbuilder
- Owner: Benehiko
- Created: 2023-08-12T18:45:38.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2023-12-22T09:27:43.000Z (over 1 year ago)
- Last Synced: 2025-02-13T12:17:18.620Z (4 months ago)
- Language: Go
- Size: 33.2 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# SQL generator
Builds SQL using Go.
Values are omitted and replaced with placeholder values.```go
s := Select("u.id", "u.username").
From("users").
As("u").
InnerJoin("roles").
As("r").
On("r.id", "u.role_id").
LeftJoin("permissions").
On("p.id", "u.permission_id").
Where("u.id", Equals).
OrderBy(Asc, "u.id").SQL()
```Produces
```sql
SELECT u.id, u.username FROM
users AS u INNER JOIN roles AS r ON r.id = u.role_id
LEFT JOIN permissions ON p.id = u.permission_id
WHERE u.id = $1 ORDER BY u.id ASC
``````go
Select("id", "username").From("users").Where("id", In(3)).SQL()
``````sql
SELECT id, username FROM users WHERE id IN ($1, $2, $3)
```## Get Started
```sh
go get -u github.com/Benehiko/sqlbuilder
``````go
package mainimport "github.com/Benehiko/sqlbuilder"
func main() {
d, err := sql.Open("...", "connection-string")
if err != nil {
panic(err)
}// values are replaced with placeholder values
s := sqlbuilder.Insert("user_id", "name").Into("users").Values(1, "foo").Returning("name").SQL()
// INSERT INTO users (user_id, name) VALUES ($1, $2)
var name string
// add the values here in the order they were given above
err := db.QueryRow(ctx, s, 1, "foo").Scan(&name)
if err != nil {
panic(err)
}
}
```## More Examples
### Select
```go
Select("id", "username").From("users").Where("id", Equals).And("username", Equals).Or("email", Equals).SQL()
```### Update
```go
Update("users").Set("id").Where("id", Equals).And("username", Equals).SQL()
```### Delete
```go
Delete().From("users").Where("id", NotEqual).And("name", In(3)).SQL()
```### Insert
```go
Insert("user_id", "name").Into("users").Select("id", "name").From("users").SQL()
```### Where Operators
Where's accept `BasicOperator` and `SpecialOperator` types.
See below for the list of both types.SpecialOperators require specifying the number of values you expect to
add to an `IN` or `NOT IN` query.For example `In(2)` specifies only two placeholder variables inside the `IN` SQL operator.
```sql
IN ($1, $2)
``````go
s := Select("id").From("users")s.Where("id", NotEqual)
s.And("created_at", LessThanOrEqual)
s.Or("username", In(2))
s.Or("email", NotIn(5))/*
const (
Equals BasicOperator = "="
NotEqual BasicOperator = "!="
GreaterThan BasicOperator = ">"
GreaterThanOrEqual BasicOperator = ">="
LessThan BasicOperator = "<"
LessThanOrEqual BasicOperator = "<="
Like BasicOperator = "LIKE"
NotLike BasicOperator = "NOT LIKE"
IsNull BasicOperator = "IS NULL"
IsNotNull BasicOperator = "IS NOT NULL"
IsTrue BasicOperator = "IS TRUE"
IsNotTrue BasicOperator = "IS NOT TRUE"
IsFalse BasicOperator = "IS FALSE"
IsNotFalse BasicOperator = "IS NOT FALSE"
IsNotDistinctFrom BasicOperator = "IS NOT DISTINCT FROM"
)
*/
```