Skip to content

Commit

Permalink
readme
Browse files Browse the repository at this point in the history
  • Loading branch information
amirrezaask committed Nov 19, 2021
1 parent 885831b commit 6559d10
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 20 deletions.
14 changes: 14 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,20 @@ if err != nil {
panic(err)
}
```
##### Custom queries
Sometimes you need custom queries but you want the power of orm with you.
```go
var models []*Model
err = modelRepository.Bind(qb.NewSelect().
From("users").
Select("id", "name").
OrderBy("created_at", "DESC"), models)
if err != nil {
panic(err)
}
```
you can use `Bind`, `Query`, `Exec` and also their `Context` version methods on repository to execute any query you
want whether you build them with `qb` or you just write them by hand.
# Benchmarks
for CRUD operations on 10000 records
- Create
Expand Down
2 changes: 1 addition & 1 deletion finishers.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ func (s *Repository) FillWithRelations(v interface{}) error {
if s.dialect.IncludeIndexInPlaceholder {
ph = ph + "1"
}
builder := qb.NewQuery().
builder := qb.NewSelect().
Select(s.metadata.Columns(true)...).
From(s.metadata.Table).
Where(qb.WhereHelpers.Equal(s.pkName(v), ph)).
Expand Down
2 changes: 1 addition & 1 deletion qb/select.go
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ func (q *SelectStmt) Build() (string, []interface{}, error) {
return strings.Join(sections, " "), q.args, nil
}

func NewQuery(opts ...func(stmt *SelectStmt)) *SelectStmt {
func NewSelect(opts ...func(stmt *SelectStmt)) *SelectStmt {
s := &SelectStmt{}
for _, opt := range opts {
opt(s)
Expand Down
30 changes: 15 additions & 15 deletions qb/select_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
func TestQueryBuilding(t *testing.T) {

t.Run("select with all aggregator functions", func(t *testing.T) {
sql, args, err := NewQuery().
sql, args, err := NewSelect().
From("users").
Select("id", "name", Aggregators.Max("age"), Aggregators.Min("weight"), Aggregators.Sum("balance"), Aggregators.Avg("height"), Aggregators.Count("name")).
Build()
Expand All @@ -19,7 +19,7 @@ func TestQueryBuilding(t *testing.T) {
})

t.Run("select with comparison where", func(t *testing.T) {
sql, args, err := NewQuery().From("users").
sql, args, err := NewSelect().From("users").
Select("id", "name").
Where("id", "=", "$1").
WithArgs(1).
Expand All @@ -30,7 +30,7 @@ func TestQueryBuilding(t *testing.T) {
})

t.Run("select with not operator", func(t *testing.T) {
sql, args, err := NewQuery().From("users").
sql, args, err := NewSelect().From("users").
Select("id", "name").
Where(WhereHelpers.Not("id", "=", "$1")).
WithArgs(1).
Expand All @@ -41,7 +41,7 @@ func TestQueryBuilding(t *testing.T) {
})

t.Run("select with multiple AND, OR", func(t *testing.T) {
sql, args, err := NewQuery().From("users").
sql, args, err := NewSelect().From("users").
Select("id", "name").
Where(WhereHelpers.And(
WhereHelpers.Or(
Expand All @@ -57,7 +57,7 @@ func TestQueryBuilding(t *testing.T) {
})

t.Run("select with Like", func(t *testing.T) {
sql, args, err := NewQuery().
sql, args, err := NewSelect().
From("users").
Select("id").
Where(WhereHelpers.Like("name", "%a")).Build()
Expand All @@ -67,7 +67,7 @@ func TestQueryBuilding(t *testing.T) {
})

t.Run("select WHERE IN", func(t *testing.T) {
sql, args, err := NewQuery().From("users").
sql, args, err := NewSelect().From("users").
Select("id", "name").
Where(WhereHelpers.And(WhereHelpers.In("name", "$1", "$2"))).
WithArgs("'jafar'", "'khadije'").
Expand All @@ -78,7 +78,7 @@ func TestQueryBuilding(t *testing.T) {
})

t.Run("select BETWEEN", func(t *testing.T) {
sql, args, err := NewQuery().From("users").
sql, args, err := NewSelect().From("users").
Select("id", "name").
Where(WhereHelpers.Between("age", "$1", "$2")).WithArgs(10, 18).Build()

Expand All @@ -88,7 +88,7 @@ func TestQueryBuilding(t *testing.T) {
})

t.Run("select orderby desc", func(t *testing.T) {
sql, args, err := NewQuery().
sql, args, err := NewSelect().
From("users").
Select("id", "name").
OrderBy("created_at", "DESC").
Expand All @@ -100,7 +100,7 @@ func TestQueryBuilding(t *testing.T) {
})

t.Run("select distinct", func(t *testing.T) {
sql, args, err := NewQuery().
sql, args, err := NewSelect().
From("users").
Select("name").
Distinct().
Expand All @@ -113,7 +113,7 @@ func TestQueryBuilding(t *testing.T) {
})

t.Run("select orderby asc", func(t *testing.T) {
sql, args, err := NewQuery().
sql, args, err := NewSelect().
From("users").
Select("id", "name").
OrderBy("created_at", "ASC").
Expand All @@ -124,14 +124,14 @@ func TestQueryBuilding(t *testing.T) {
})

t.Run("select with groupby", func(t *testing.T) {
sql, args, err := NewQuery().From("users").Select("id").GroupBy("name", "age").Build()
sql, args, err := NewSelect().From("users").Select("id").GroupBy("name", "age").Build()
assert.NoError(t, err)
assert.Empty(t, args)
assert.Equal(t, `SELECT id FROM users GROUP BY name, age`, sql)
})

t.Run("select with join", func(t *testing.T) {
sql, args, err := NewQuery().
sql, args, err := NewSelect().
From("users").
Select("id", "name").
RightJoin("addresses", "users.id", "=", "addresses.user_id").
Expand All @@ -142,7 +142,7 @@ func TestQueryBuilding(t *testing.T) {
})

t.Run("select with multiple joins", func(t *testing.T) {
sql, args, err := NewQuery().From("users").Select("id", "name").
sql, args, err := NewSelect().From("users").Select("id", "name").
RightJoin("addresses", "users.id", "=", "addresses.user_id").
LeftJoin("user_credits", "users.id", "=", "user_credits.user_id").
Build()
Expand All @@ -152,15 +152,15 @@ func TestQueryBuilding(t *testing.T) {
})

t.Run("select with limit and offset", func(t *testing.T) {
sql, args, err := NewQuery().From("users").Take(10).Skip(10).Build()
sql, args, err := NewSelect().From("users").Take(10).Skip(10).Build()
assert.NoError(t, err)
assert.Empty(t, args)
assert.Equal(t, `SELECT * FROM users LIMIT 10 OFFSET 10`, sql)

})

t.Run("select with having", func(t *testing.T) {
sql, args, err := NewQuery().From("users").Having("COUNT(users) > 10").Build()
sql, args, err := NewSelect().From("users").Having("COUNT(users) > 10").Build()
assert.NoError(t, err)
assert.Empty(t, args)
assert.Equal(t, `SELECT * FROM users HAVING COUNT(users) > 10`, sql)
Expand Down
5 changes: 2 additions & 3 deletions repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ func NewRepository(conn *sql.DB, dialect *Dialect, makeRepositoryFor interface{}
}
return s
}

// Fill the struct
func (s *Repository) Fill(v interface{}) error {
var q string
Expand All @@ -37,7 +36,7 @@ func (s *Repository) Fill(v interface{}) error {
if s.dialect.IncludeIndexInPlaceholder {
ph = ph + "1"
}
builder := qb.NewQuery().
builder := qb.NewSelect().
Select(s.metadata.Columns(true)...).
From(s.metadata.Table).
Where(qb.WhereHelpers.Equal(s.pkName(v), ph)).
Expand All @@ -49,7 +48,7 @@ func (s *Repository) Fill(v interface{}) error {
}

} else {
q, args, err = qb.NewQuery().
q, args, err = qb.NewSelect().
From(s.metadata.Table).
Select(s.metadata.Columns(true)...).
Where(qb.WhereHelpers.ForKV(s.toMap(v))).Limit(1).Build()
Expand Down

0 comments on commit 6559d10

Please sign in to comment.