...
1 package sqlgen
2
3 import (
4 "strings"
5
6 "github.com/doug-martin/goqu/v9/exp"
7 "github.com/doug-martin/goqu/v9/internal/errors"
8 "github.com/doug-martin/goqu/v9/internal/sb"
9 )
10
11 type (
12
13
14 TruncateSQLGenerator interface {
15 Dialect() string
16 Generate(b sb.SQLBuilder, clauses exp.TruncateClauses)
17 }
18
19
20
21 truncateSQLGenerator struct {
22 CommonSQLGenerator
23 }
24 )
25
26 var errNoSourceForTruncate = errors.New("no source found when generating truncate sql")
27
28 func NewTruncateSQLGenerator(dialect string, do *SQLDialectOptions) TruncateSQLGenerator {
29 return &truncateSQLGenerator{NewCommonSQLGenerator(dialect, do)}
30 }
31
32 func (tsg *truncateSQLGenerator) Generate(b sb.SQLBuilder, clauses exp.TruncateClauses) {
33 if !clauses.HasTable() {
34 b.SetError(errNoSourceForTruncate)
35 return
36 }
37 for _, f := range tsg.DialectOptions().TruncateSQLOrder {
38 if b.Error() != nil {
39 return
40 }
41 switch f {
42 case TruncateSQLFragment:
43 tsg.TruncateSQL(b, clauses.Table(), clauses.Options())
44 default:
45 b.SetError(ErrNotSupportedFragment("TRUNCATE", f))
46 }
47 }
48 }
49
50
51 func (tsg *truncateSQLGenerator) TruncateSQL(b sb.SQLBuilder, from exp.ColumnListExpression, opts exp.TruncateOptions) {
52 b.Write(tsg.DialectOptions().TruncateClause)
53 tsg.SourcesSQL(b, from)
54 if opts.Identity != tsg.DialectOptions().EmptyString {
55 b.WriteRunes(tsg.DialectOptions().SpaceRune).
56 WriteStrings(strings.ToUpper(opts.Identity)).
57 Write(tsg.DialectOptions().IdentityFragment)
58 }
59 if opts.Cascade {
60 b.Write(tsg.DialectOptions().CascadeFragment)
61 } else if opts.Restrict {
62 b.Write(tsg.DialectOptions().RestrictFragment)
63 }
64 }
65
View as plain text