...

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

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

     1  package goqu
     2  
     3  import (
     4  	"strings"
     5  	"sync"
     6  
     7  	"github.com/doug-martin/goqu/v9/exp"
     8  	"github.com/doug-martin/goqu/v9/internal/sb"
     9  	"github.com/doug-martin/goqu/v9/sqlgen"
    10  )
    11  
    12  type (
    13  	SQLDialectOptions = sqlgen.SQLDialectOptions
    14  	// An adapter interface to be used by a Dataset to generate SQL for a specific dialect.
    15  	// See DefaultAdapter for a concrete implementation and examples.
    16  	SQLDialect interface {
    17  		Dialect() string
    18  		ToSelectSQL(b sb.SQLBuilder, clauses exp.SelectClauses)
    19  		ToUpdateSQL(b sb.SQLBuilder, clauses exp.UpdateClauses)
    20  		ToInsertSQL(b sb.SQLBuilder, clauses exp.InsertClauses)
    21  		ToDeleteSQL(b sb.SQLBuilder, clauses exp.DeleteClauses)
    22  		ToTruncateSQL(b sb.SQLBuilder, clauses exp.TruncateClauses)
    23  	}
    24  	// The default adapter. This class should be used when building a new adapter. When creating a new adapter you can
    25  	// either override methods, or more typically update default values.
    26  	// See (github.com/doug-martin/goqu/dialect/postgres)
    27  	sqlDialect struct {
    28  		dialect        string
    29  		dialectOptions *SQLDialectOptions
    30  		selectGen      sqlgen.SelectSQLGenerator
    31  		updateGen      sqlgen.UpdateSQLGenerator
    32  		insertGen      sqlgen.InsertSQLGenerator
    33  		deleteGen      sqlgen.DeleteSQLGenerator
    34  		truncateGen    sqlgen.TruncateSQLGenerator
    35  	}
    36  )
    37  
    38  var (
    39  	dialects              = make(map[string]SQLDialect)
    40  	DefaultDialectOptions = sqlgen.DefaultDialectOptions
    41  	dialectsMu            sync.RWMutex
    42  )
    43  
    44  func init() {
    45  	RegisterDialect("default", DefaultDialectOptions())
    46  }
    47  
    48  func RegisterDialect(name string, do *SQLDialectOptions) {
    49  	dialectsMu.Lock()
    50  	defer dialectsMu.Unlock()
    51  	lowerName := strings.ToLower(name)
    52  	dialects[lowerName] = newDialect(lowerName, do)
    53  }
    54  
    55  func DeregisterDialect(name string) {
    56  	dialectsMu.Lock()
    57  	defer dialectsMu.Unlock()
    58  	delete(dialects, strings.ToLower(name))
    59  }
    60  
    61  func GetDialect(name string) SQLDialect {
    62  	name = strings.ToLower(name)
    63  	if d, ok := dialects[name]; ok {
    64  		return d
    65  	}
    66  	return newDialect("default", DefaultDialectOptions())
    67  }
    68  
    69  func newDialect(dialect string, do *SQLDialectOptions) SQLDialect {
    70  	return &sqlDialect{
    71  		dialect:        dialect,
    72  		dialectOptions: do,
    73  		selectGen:      sqlgen.NewSelectSQLGenerator(dialect, do),
    74  		updateGen:      sqlgen.NewUpdateSQLGenerator(dialect, do),
    75  		insertGen:      sqlgen.NewInsertSQLGenerator(dialect, do),
    76  		deleteGen:      sqlgen.NewDeleteSQLGenerator(dialect, do),
    77  		truncateGen:    sqlgen.NewTruncateSQLGenerator(dialect, do),
    78  	}
    79  }
    80  
    81  func (d *sqlDialect) Dialect() string {
    82  	return d.dialect
    83  }
    84  
    85  func (d *sqlDialect) ToSelectSQL(b sb.SQLBuilder, clauses exp.SelectClauses) {
    86  	d.selectGen.Generate(b, clauses)
    87  }
    88  
    89  func (d *sqlDialect) ToUpdateSQL(b sb.SQLBuilder, clauses exp.UpdateClauses) {
    90  	d.updateGen.Generate(b, clauses)
    91  }
    92  
    93  func (d *sqlDialect) ToInsertSQL(b sb.SQLBuilder, clauses exp.InsertClauses) {
    94  	d.insertGen.Generate(b, clauses)
    95  }
    96  
    97  func (d *sqlDialect) ToDeleteSQL(b sb.SQLBuilder, clauses exp.DeleteClauses) {
    98  	d.deleteGen.Generate(b, clauses)
    99  }
   100  
   101  func (d *sqlDialect) ToTruncateSQL(b sb.SQLBuilder, clauses exp.TruncateClauses) {
   102  	d.truncateGen.Generate(b, clauses)
   103  }
   104  

View as plain text