Skip to content
/ squildx Public

A sql query building lib for sqlx (named parameters

Notifications You must be signed in to change notification settings

modfin/squildx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

squildx

A Go SQL query builder for use with sqlx using named parameters (:param style). Immutable builder pattern — every method returns a new builder, so partial queries can be safely reused.

Install

go get github.com/modfin/squildx

Usage

Basic query:

query, params, err := squildx.New().
    Select("id", "name", "email").
    From("users").
    Where("active = :active", true).
    Build()

// query:  SELECT id, name, email FROM users WHERE active = :active
// params: map[active:true]

Conditionally building a query:

q := squildx.New().
    Select("id", "name", "email").
    From("users").
    Where("active = :active", true)

if nameFilter != "" {
    q = q.Where("name ILIKE :name", nameFilter)
}

if sortByName {
    q = q.OrderBy("name ASC")
}

query, params, err := q.Build()

OrderBy with parameters:

query, params, err := squildx.New().
    Select("id", "title").
    From("documents").
    OrderBy("similarity(embedding, :query_vec) DESC", vec).
    Build()

// query:  SELECT id, title FROM documents ORDER BY similarity(embedding, :query_vec) DESC
// params: map[query_vec:<vec>]

Where subqueries:

// WHERE EXISTS
sub := squildx.New().Select("1").From("orders").Where("orders.user_id = users.id")

query, params, err := squildx.New().
    Select("*").
    From("users").
    WhereExists(sub).
    Build()

// query: SELECT * FROM users WHERE EXISTS (SELECT 1 FROM orders WHERE orders.user_id = users.id)
// WHERE IN with parameters
sub := squildx.New().Select("user_id").From("orders").Where("total > :min_total", 100)

query, params, err := squildx.New().
    Select("*").
    From("users").
    WhereIn("id", sub).
    Build()

// query:  SELECT * FROM users WHERE id IN (SELECT user_id FROM orders WHERE total > :min_total)
// params: map[min_total:100]

Also available: WhereNotExists and WhereNotIn.

Other features: Distinct(), InnerJoinLateral/LeftJoinLateral/CrossJoinLateral.

About

A sql query building lib for sqlx (named parameters

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages