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.go443
1 files changed, 0 insertions, 443 deletions
diff --git a/vendor/github.com/uptrace/bun/query_delete.go b/vendor/github.com/uptrace/bun/query_delete.go
deleted file mode 100644
index 99ec37bb7..000000000
--- a/vendor/github.com/uptrace/bun/query_delete.go
+++ /dev/null
@@ -1,443 +0,0 @@
-package bun
-
-import (
- "context"
- "database/sql"
- "errors"
- "time"
-
- "github.com/uptrace/bun/dialect/feature"
- "github.com/uptrace/bun/internal"
- "github.com/uptrace/bun/schema"
-)
-
-type DeleteQuery struct {
- whereBaseQuery
- orderLimitOffsetQuery
- returningQuery
-
- comment string
-}
-
-var _ Query = (*DeleteQuery)(nil)
-
-func NewDeleteQuery(db *DB) *DeleteQuery {
- q := &DeleteQuery{
- whereBaseQuery: whereBaseQuery{
- baseQuery: baseQuery{
- db: db,
- },
- },
- }
- return q
-}
-
-func (q *DeleteQuery) Conn(db IConn) *DeleteQuery {
- q.setConn(db)
- return q
-}
-
-func (q *DeleteQuery) Model(model interface{}) *DeleteQuery {
- q.setModel(model)
- return q
-}
-
-func (q *DeleteQuery) Err(err error) *DeleteQuery {
- q.setErr(err)
- return 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
-}
-
-func (q *DeleteQuery) With(name string, query Query) *DeleteQuery {
- q.addWith(name, query, false)
- return q
-}
-
-func (q *DeleteQuery) WithRecursive(name string, query Query) *DeleteQuery {
- q.addWith(name, query, true)
- return q
-}
-
-func (q *DeleteQuery) Table(tables ...string) *DeleteQuery {
- for _, table := range tables {
- q.addTable(schema.UnsafeIdent(table))
- }
- return q
-}
-
-func (q *DeleteQuery) TableExpr(query string, args ...interface{}) *DeleteQuery {
- q.addTable(schema.SafeQuery(query, args))
- return q
-}
-
-func (q *DeleteQuery) ModelTableExpr(query string, args ...interface{}) *DeleteQuery {
- q.modelTableName = schema.SafeQuery(query, args)
- return q
-}
-
-//------------------------------------------------------------------------------
-
-func (q *DeleteQuery) WherePK(cols ...string) *DeleteQuery {
- q.addWhereCols(cols)
- return q
-}
-
-func (q *DeleteQuery) Where(query string, args ...interface{}) *DeleteQuery {
- q.addWhere(schema.SafeQueryWithSep(query, args, " AND "))
- return q
-}
-
-func (q *DeleteQuery) WhereOr(query string, args ...interface{}) *DeleteQuery {
- q.addWhere(schema.SafeQueryWithSep(query, args, " OR "))
- return q
-}
-
-func (q *DeleteQuery) WhereGroup(sep string, fn func(*DeleteQuery) *DeleteQuery) *DeleteQuery {
- saved := q.where
- q.where = nil
-
- q = fn(q)
-
- where := q.where
- q.where = saved
-
- q.addWhereGroup(sep, where)
-
- return q
-}
-
-func (q *DeleteQuery) WhereDeleted() *DeleteQuery {
- q.whereDeleted()
- return q
-}
-
-func (q *DeleteQuery) WhereAllWithDeleted() *DeleteQuery {
- q.whereAllWithDeleted()
- return q
-}
-
-func (q *DeleteQuery) Order(orders ...string) *DeleteQuery {
- if !q.hasFeature(feature.DeleteOrderLimit) {
- q.err = feature.NewNotSupportError(feature.DeleteOrderLimit)
- return q
- }
- q.addOrder(orders...)
- return q
-}
-
-func (q *DeleteQuery) OrderExpr(query string, args ...interface{}) *DeleteQuery {
- if !q.hasFeature(feature.DeleteOrderLimit) {
- q.err = feature.NewNotSupportError(feature.DeleteOrderLimit)
- 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 = feature.NewNotSupportError(feature.DeleteOrderLimit)
- 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 = feature.NewNotSupportError(feature.DeleteOrderLimit)
- return q
- }
-
- q.addReturning(schema.SafeQuery(query, args))
- return q
-}
-
-//------------------------------------------------------------------------------
-
-// Comment adds a comment to the query, wrapped by /* ... */.
-func (q *DeleteQuery) Comment(comment string) *DeleteQuery {
- q.comment = comment
- return q
-}
-
-//------------------------------------------------------------------------------
-
-func (q *DeleteQuery) Operation() string {
- return "DELETE"
-}
-
-func (q *DeleteQuery) AppendQuery(fmter schema.Formatter, b []byte) (_ []byte, err error) {
- if q.err != nil {
- return nil, q.err
- }
-
- b = appendComment(b, q.comment)
-
- fmter = formatterWithModel(fmter, q)
-
- if q.isSoftDelete() {
- now := time.Now()
-
- if err := q.tableModel.updateSoftDeleteField(now); err != nil {
- return nil, err
- }
-
- upd := &UpdateQuery{
- whereBaseQuery: q.whereBaseQuery,
- returningQuery: q.returningQuery,
- }
- upd.Set(q.softDeleteSet(fmter, now))
-
- return upd.AppendQuery(fmter, b)
- }
-
- withAlias := q.db.HasFeature(feature.DeleteTableAlias)
-
- b, err = q.appendWith(fmter, b)
- if err != nil {
- return nil, err
- }
-
- b = append(b, "DELETE FROM "...)
-
- if withAlias {
- b, err = q.appendFirstTableWithAlias(fmter, b)
- } else {
- b, err = q.appendFirstTable(fmter, b)
- }
- if err != nil {
- return nil, err
- }
-
- if q.hasMultiTables() {
- b = append(b, " USING "...)
- b, err = q.appendOtherTables(fmter, b)
- if err != nil {
- return nil, err
- }
- }
-
- if q.hasFeature(feature.Output) && q.hasReturning() {
- b = append(b, " OUTPUT "...)
- b, err = q.appendOutput(fmter, b)
- if err != nil {
- return nil, err
- }
- }
-
- b, err = q.mustAppendWhere(fmter, b, withAlias)
- if err != nil {
- return nil, err
- }
-
- 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 {
- return nil, err
- }
- }
-
- return b, nil
-}
-
-func (q *DeleteQuery) isSoftDelete() bool {
- return q.tableModel != nil && q.table.SoftDeleteField != nil && !q.flags.Has(forceDeleteFlag)
-}
-
-func (q *DeleteQuery) softDeleteSet(fmter schema.Formatter, tm time.Time) string {
- b := make([]byte, 0, 32)
- if fmter.HasFeature(feature.UpdateMultiTable) {
- b = append(b, q.table.SQLAlias...)
- b = append(b, '.')
- }
- b = append(b, q.table.SoftDeleteField.SQLName...)
- b = append(b, " = "...)
- b = schema.Append(fmter, b, tm)
- return internal.String(b)
-}
-
-//------------------------------------------------------------------------------
-
-func (q *DeleteQuery) Scan(ctx context.Context, dest ...interface{}) error {
- _, err := q.scanOrExec(ctx, dest, true)
- return err
-}
-
-func (q *DeleteQuery) Exec(ctx context.Context, dest ...interface{}) (sql.Result, error) {
- return q.scanOrExec(ctx, dest, len(dest) > 0)
-}
-
-func (q *DeleteQuery) scanOrExec(
- ctx context.Context, dest []interface{}, hasDest bool,
-) (sql.Result, error) {
- if q.err != nil {
- return nil, q.err
- }
-
- if q.table != nil {
- if err := q.beforeDeleteHook(ctx); err != nil {
- return nil, err
- }
- }
-
- // Run append model hooks before generating the query.
- if err := q.beforeAppendModel(ctx, q); err != nil {
- return nil, err
- }
-
- // Generate the query before checking hasReturning.
- queryBytes, err := q.AppendQuery(q.db.fmter, q.db.makeQueryBytes())
- if err != nil {
- return nil, err
- }
-
- useScan := hasDest || (q.hasReturning() && q.hasFeature(feature.DeleteReturning|feature.Output))
- var model Model
-
- if useScan {
- var err error
- model, err = q.getModel(dest)
- if err != nil {
- return nil, err
- }
- }
-
- query := internal.String(queryBytes)
-
- var res sql.Result
-
- if useScan {
- res, err = q.scan(ctx, q, query, model, hasDest)
- if err != nil {
- return nil, err
- }
- } else {
- res, err = q.exec(ctx, q, query)
- if err != nil {
- return nil, err
- }
- }
-
- if q.table != nil {
- if err := q.afterDeleteHook(ctx); err != nil {
- return nil, err
- }
- }
-
- return res, nil
-}
-
-func (q *DeleteQuery) beforeDeleteHook(ctx context.Context) error {
- if hook, ok := q.table.ZeroIface.(BeforeDeleteHook); ok {
- if err := hook.BeforeDelete(ctx, q); err != nil {
- return err
- }
- }
- return nil
-}
-
-func (q *DeleteQuery) afterDeleteHook(ctx context.Context) error {
- if hook, ok := q.table.ZeroIface.(AfterDeleteHook); ok {
- if err := hook.AfterDelete(ctx, q); err != nil {
- return err
- }
- }
- return nil
-}
-
-func (q *DeleteQuery) String() string {
- buf, err := q.AppendQuery(q.db.Formatter(), nil)
- if err != nil {
- panic(err)
- }
-
- return string(buf)
-}
-
-//------------------------------------------------------------------------------
-
-func (q *DeleteQuery) QueryBuilder() QueryBuilder {
- return &deleteQueryBuilder{q}
-}
-
-func (q *DeleteQuery) ApplyQueryBuilder(fn func(QueryBuilder) QueryBuilder) *DeleteQuery {
- return fn(q.QueryBuilder()).Unwrap().(*DeleteQuery)
-}
-
-type deleteQueryBuilder struct {
- *DeleteQuery
-}
-
-func (q *deleteQueryBuilder) WhereGroup(
- sep string, fn func(QueryBuilder) QueryBuilder,
-) QueryBuilder {
- q.DeleteQuery = q.DeleteQuery.WhereGroup(sep, func(qs *DeleteQuery) *DeleteQuery {
- return fn(q).(*deleteQueryBuilder).DeleteQuery
- })
- return q
-}
-
-func (q *deleteQueryBuilder) Where(query string, args ...interface{}) QueryBuilder {
- q.DeleteQuery.Where(query, args...)
- return q
-}
-
-func (q *deleteQueryBuilder) WhereOr(query string, args ...interface{}) QueryBuilder {
- q.DeleteQuery.WhereOr(query, args...)
- return q
-}
-
-func (q *deleteQueryBuilder) WhereDeleted() QueryBuilder {
- q.DeleteQuery.WhereDeleted()
- return q
-}
-
-func (q *deleteQueryBuilder) WhereAllWithDeleted() QueryBuilder {
- q.DeleteQuery.WhereAllWithDeleted()
- return q
-}
-
-func (q *deleteQueryBuilder) WherePK(cols ...string) QueryBuilder {
- q.DeleteQuery.WherePK(cols...)
- return q
-}
-
-func (q *deleteQueryBuilder) Unwrap() interface{} {
- return q.DeleteQuery
-}