summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/query_delete.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/uptrace/bun/query_delete.go')
-rw-r--r--vendor/github.com/uptrace/bun/query_delete.go63
1 files changed, 57 insertions, 6 deletions
diff --git a/vendor/github.com/uptrace/bun/query_delete.go b/vendor/github.com/uptrace/bun/query_delete.go
index 49a750cc8..ccfeb1997 100644
--- a/vendor/github.com/uptrace/bun/query_delete.go
+++ b/vendor/github.com/uptrace/bun/query_delete.go
@@ -3,6 +3,7 @@ package bun
import (
"context"
"database/sql"
+ "errors"
"time"
"github.com/uptrace/bun/dialect/feature"
@@ -12,6 +13,7 @@ import (
type DeleteQuery struct {
whereBaseQuery
+ orderLimitOffsetQuery
returningQuery
}
@@ -44,10 +46,12 @@ func (q *DeleteQuery) Err(err error) *DeleteQuery {
return q
}
-// Apply calls the fn passing the DeleteQuery as an argument.
-func (q *DeleteQuery) Apply(fn func(*DeleteQuery) *DeleteQuery) *DeleteQuery {
- if fn != nil {
- return fn(q)
+// Apply calls each function in fns, passing the DeleteQuery as an argument.
+func (q *DeleteQuery) Apply(fns ...func(*DeleteQuery) *DeleteQuery) *DeleteQuery {
+ for _, fn := range fns {
+ if fn != nil {
+ q = fn(q)
+ }
}
return q
}
@@ -120,17 +124,50 @@ func (q *DeleteQuery) WhereAllWithDeleted() *DeleteQuery {
return q
}
+func (q *DeleteQuery) Order(orders ...string) *DeleteQuery {
+ if !q.hasFeature(feature.DeleteOrderLimit) {
+ q.err = errors.New("bun: order is not supported for current dialect")
+ return q
+ }
+ q.addOrder(orders...)
+ return q
+}
+
+func (q *DeleteQuery) OrderExpr(query string, args ...interface{}) *DeleteQuery {
+ if !q.hasFeature(feature.DeleteOrderLimit) {
+ q.err = errors.New("bun: order is not supported for current dialect")
+ return q
+ }
+ q.addOrderExpr(query, args...)
+ return q
+}
+
func (q *DeleteQuery) ForceDelete() *DeleteQuery {
q.flags = q.flags.Set(forceDeleteFlag)
return q
}
+// ------------------------------------------------------------------------------
+func (q *DeleteQuery) Limit(n int) *DeleteQuery {
+ if !q.hasFeature(feature.DeleteOrderLimit) {
+ q.err = errors.New("bun: limit is not supported for current dialect")
+ return q
+ }
+ q.setLimit(n)
+ return q
+}
+
//------------------------------------------------------------------------------
// Returning adds a RETURNING clause to the query.
//
// To suppress the auto-generated RETURNING clause, use `Returning("NULL")`.
func (q *DeleteQuery) Returning(query string, args ...interface{}) *DeleteQuery {
+ if !q.hasFeature(feature.DeleteReturning) {
+ q.err = errors.New("bun: returning is not supported for current dialect")
+ return q
+ }
+
q.addReturning(schema.SafeQuery(query, args))
return q
}
@@ -203,7 +240,21 @@ func (q *DeleteQuery) AppendQuery(fmter schema.Formatter, b []byte) (_ []byte, e
return nil, err
}
- if q.hasFeature(feature.Returning) && q.hasReturning() {
+ if q.hasMultiTables() && (len(q.order) > 0 || q.limit > 0) {
+ return nil, errors.New("bun: can't use ORDER or LIMIT with multiple tables")
+ }
+
+ b, err = q.appendOrder(fmter, b)
+ if err != nil {
+ return nil, err
+ }
+
+ b, err = q.appendLimitOffset(fmter, b)
+ if err != nil {
+ return nil, err
+ }
+
+ if q.hasFeature(feature.DeleteReturning) && q.hasReturning() {
b = append(b, " RETURNING "...)
b, err = q.appendReturning(fmter, b)
if err != nil {
@@ -265,7 +316,7 @@ func (q *DeleteQuery) scanOrExec(
return nil, err
}
- useScan := hasDest || (q.hasReturning() && q.hasFeature(feature.Returning|feature.Output))
+ useScan := hasDest || (q.hasReturning() && q.hasFeature(feature.DeleteReturning|feature.Output))
var model Model
if useScan {