summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/query_base.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/uptrace/bun/query_base.go')
-rw-r--r--vendor/github.com/uptrace/bun/query_base.go23
1 files changed, 14 insertions, 9 deletions
diff --git a/vendor/github.com/uptrace/bun/query_base.go b/vendor/github.com/uptrace/bun/query_base.go
index b140ca24d..9df70d1f4 100644
--- a/vendor/github.com/uptrace/bun/query_base.go
+++ b/vendor/github.com/uptrace/bun/query_base.go
@@ -20,8 +20,9 @@ const (
)
type withQuery struct {
- name string
- query schema.QueryAppender
+ name string
+ query schema.QueryAppender
+ recursive bool
}
// IConn is a common interface for *sql.DB, *sql.Conn, and *sql.Tx.
@@ -158,8 +159,7 @@ func (q *baseQuery) setConn(db IConn) {
}
}
-// TODO: rename to setModel
-func (q *baseQuery) setTableModel(modeli interface{}) {
+func (q *baseQuery) setModel(modeli interface{}) {
model, err := newSingleModel(q.db, modeli)
if err != nil {
q.setErr(err)
@@ -238,17 +238,18 @@ func (q *baseQuery) isSoftDelete() bool {
if q.table != nil {
return q.table.SoftDeleteField != nil &&
!q.flags.Has(allWithDeletedFlag) &&
- !q.flags.Has(forceDeleteFlag)
+ (!q.flags.Has(forceDeleteFlag) || q.flags.Has(deletedFlag))
}
return false
}
//------------------------------------------------------------------------------
-func (q *baseQuery) addWith(name string, query schema.QueryAppender) {
+func (q *baseQuery) addWith(name string, query schema.QueryAppender, recursive bool) {
q.with = append(q.with, withQuery{
- name: name,
- query: query,
+ name: name,
+ query: query,
+ recursive: recursive,
})
}
@@ -263,6 +264,10 @@ func (q *baseQuery) appendWith(fmter schema.Formatter, b []byte) (_ []byte, err
b = append(b, ", "...)
}
+ if with.recursive {
+ b = append(b, "RECURSIVE "...)
+ }
+
b, err = q.appendCTE(fmter, b, with)
if err != nil {
return nil, err
@@ -768,7 +773,7 @@ func (q *whereBaseQuery) addWhereCols(cols []string) {
func (q *whereBaseQuery) mustAppendWhere(
fmter schema.Formatter, b []byte, withAlias bool,
) ([]byte, error) {
- if len(q.where) == 0 && q.whereFields == nil {
+ if len(q.where) == 0 && q.whereFields == nil && !q.flags.Has(deletedFlag) {
err := errors.New("bun: Update and Delete queries require at least one Where")
return nil, err
}