diff options
Diffstat (limited to 'vendor/github.com/uptrace/bun/schema/dialect.go')
| -rw-r--r-- | vendor/github.com/uptrace/bun/schema/dialect.go | 99 | 
1 files changed, 99 insertions, 0 deletions
| diff --git a/vendor/github.com/uptrace/bun/schema/dialect.go b/vendor/github.com/uptrace/bun/schema/dialect.go new file mode 100644 index 000000000..c50de715a --- /dev/null +++ b/vendor/github.com/uptrace/bun/schema/dialect.go @@ -0,0 +1,99 @@ +package schema + +import ( +	"database/sql" +	"reflect" +	"sync" + +	"github.com/uptrace/bun/dialect" +	"github.com/uptrace/bun/dialect/feature" +) + +type Dialect interface { +	Init(db *sql.DB) + +	Name() dialect.Name +	Features() feature.Feature + +	Tables() *Tables +	OnTable(table *Table) + +	IdentQuote() byte +	Append(fmter Formatter, b []byte, v interface{}) []byte +	Appender(typ reflect.Type) AppenderFunc +	FieldAppender(field *Field) AppenderFunc +	Scanner(typ reflect.Type) ScannerFunc +} + +//------------------------------------------------------------------------------ + +type nopDialect struct { +	tables   *Tables +	features feature.Feature + +	appenderMap sync.Map +	scannerMap  sync.Map +} + +func newNopDialect() *nopDialect { +	d := new(nopDialect) +	d.tables = NewTables(d) +	d.features = feature.Returning +	return d +} + +func (d *nopDialect) Init(*sql.DB) {} + +func (d *nopDialect) Name() dialect.Name { +	return dialect.Invalid +} + +func (d *nopDialect) Features() feature.Feature { +	return d.features +} + +func (d *nopDialect) Tables() *Tables { +	return d.tables +} + +func (d *nopDialect) OnField(field *Field) {} + +func (d *nopDialect) OnTable(table *Table) {} + +func (d *nopDialect) IdentQuote() byte { +	return '"' +} + +func (d *nopDialect) Append(fmter Formatter, b []byte, v interface{}) []byte { +	return Append(fmter, b, v, nil) +} + +func (d *nopDialect) Appender(typ reflect.Type) AppenderFunc { +	if v, ok := d.appenderMap.Load(typ); ok { +		return v.(AppenderFunc) +	} + +	fn := Appender(typ, nil) + +	if v, ok := d.appenderMap.LoadOrStore(typ, fn); ok { +		return v.(AppenderFunc) +	} +	return fn +} + +func (d *nopDialect) FieldAppender(field *Field) AppenderFunc { +	return FieldAppender(d, field) +} + +func (d *nopDialect) Scanner(typ reflect.Type) ScannerFunc { +	if v, ok := d.scannerMap.Load(typ); ok { +		return v.(ScannerFunc) +	} + +	fn := Scanner(typ) + +	if v, ok := d.scannerMap.LoadOrStore(typ, fn); ok { +		return v.(ScannerFunc) +	} +	return fn +} | 
