diff options
Diffstat (limited to 'vendor/github.com/uptrace/bun/query_base.go')
-rw-r--r-- | vendor/github.com/uptrace/bun/query_base.go | 23 |
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 } |