...

Source file src/github.com/doug-martin/goqu/v9/sqlgen/truncate_sql_generator.go

Documentation: github.com/doug-martin/goqu/v9/sqlgen

     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  	// An adapter interface to be used by a Dataset to generate SQL for a specific dialect.
    13  	// See DefaultAdapter for a concrete implementation and examples.
    14  	TruncateSQLGenerator interface {
    15  		Dialect() string
    16  		Generate(b sb.SQLBuilder, clauses exp.TruncateClauses)
    17  	}
    18  	// The default adapter. This class should be used when building a new adapter. When creating a new adapter you can
    19  	// either override methods, or more typically update default values.
    20  	// See (github.com/doug-martin/goqu/dialect/postgres)
    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  // Generates a TRUNCATE statement
    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