delete.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // Copyright 2018 Huan Du. All rights reserved.
  2. // Licensed under the MIT license that can be found in the LICENSE file.
  3. package sqlbuilder
  4. import (
  5. "bytes"
  6. "strings"
  7. )
  8. // NewDeleteBuilder creates a new DELETE builder.
  9. func NewDeleteBuilder() *DeleteBuilder {
  10. return DefaultFlavor.NewDeleteBuilder()
  11. }
  12. func newDeleteBuilder() *DeleteBuilder {
  13. args := &Args{}
  14. return &DeleteBuilder{
  15. Cond: Cond{
  16. Args: args,
  17. },
  18. args: args,
  19. }
  20. }
  21. // DeleteBuilder is a builder to build DELETE.
  22. type DeleteBuilder struct {
  23. Cond
  24. table string
  25. whereExprs []string
  26. args *Args
  27. }
  28. // DeleteFrom sets table name in DELETE.
  29. func (db *DeleteBuilder) DeleteFrom(table string) *DeleteBuilder {
  30. db.table = Escape(table)
  31. return db
  32. }
  33. // Where sets expressions of WHERE in DELETE.
  34. func (db *DeleteBuilder) Where(andExpr ...string) *DeleteBuilder {
  35. db.whereExprs = append(db.whereExprs, andExpr...)
  36. return db
  37. }
  38. // String returns the compiled DELETE string.
  39. func (db *DeleteBuilder) String() string {
  40. s, _ := db.Build()
  41. return s
  42. }
  43. // Build returns compiled DELETE string and args.
  44. // They can be used in `DB#Query` of package `database/sql` directly.
  45. func (db *DeleteBuilder) Build() (sql string, args []interface{}) {
  46. return db.BuildWithFlavor(db.args.Flavor)
  47. }
  48. // BuildWithFlavor returns compiled DELETE string and args with flavor and initial args.
  49. // They can be used in `DB#Query` of package `database/sql` directly.
  50. func (db *DeleteBuilder) BuildWithFlavor(flavor Flavor, initialArg ...interface{}) (sql string, args []interface{}) {
  51. buf := &bytes.Buffer{}
  52. buf.WriteString("DELETE FROM ")
  53. buf.WriteString(db.table)
  54. if len(db.whereExprs) > 0 {
  55. buf.WriteString(" WHERE ")
  56. buf.WriteString(strings.Join(db.whereExprs, " AND "))
  57. }
  58. return db.args.CompileWithFlavor(buf.String(), flavor, initialArg...)
  59. }
  60. // SetFlavor sets the flavor of compiled sql.
  61. func (db *DeleteBuilder) SetFlavor(flavor Flavor) (old Flavor) {
  62. old = db.args.Flavor
  63. db.args.Flavor = flavor
  64. return
  65. }