upstep bun version (#243)

This commit is contained in:
tobi 2021-09-23 11:13:28 +02:00 committed by GitHub
commit 142f37f1bd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 146 additions and 57 deletions

View file

@ -3,29 +3,14 @@ package schema
import (
"reflect"
"strconv"
"strings"
"time"
"github.com/vmihailenco/msgpack/v5"
"github.com/uptrace/bun/dialect"
"github.com/uptrace/bun/dialect/sqltype"
"github.com/uptrace/bun/internal"
)
func FieldAppender(dialect Dialect, field *Field) AppenderFunc {
if field.Tag.HasOption("msgpack") {
return appendMsgpack
}
switch strings.ToUpper(field.UserSQLType) {
case sqltype.JSON, sqltype.JSONB:
return AppendJSONValue
}
return dialect.Appender(field.StructField.Type)
}
func Append(fmter Formatter, b []byte, v interface{}, custom CustomAppender) []byte {
switch v := v.(type) {
case nil:

View file

@ -6,9 +6,11 @@ import (
"net"
"reflect"
"strconv"
"strings"
"time"
"github.com/uptrace/bun/dialect"
"github.com/uptrace/bun/dialect/sqltype"
"github.com/uptrace/bun/extra/bunjson"
"github.com/uptrace/bun/internal"
)
@ -47,6 +49,19 @@ var appenders = []AppenderFunc{
reflect.UnsafePointer: nil,
}
func FieldAppender(dialect Dialect, field *Field) AppenderFunc {
if field.Tag.HasOption("msgpack") {
return appendMsgpack
}
switch strings.ToUpper(field.UserSQLType) {
case sqltype.JSON, sqltype.JSONB:
return AppendJSONValue
}
return dialect.Appender(field.StructField.Type)
}
func Appender(typ reflect.Type, custom CustomAppender) AppenderFunc {
switch typ {
case bytesType:

View file

@ -101,7 +101,9 @@ func (f *Field) ScanValue(strct reflect.Value, src interface{}) error {
func (f *Field) markAsPK() {
f.IsPK = true
f.NotNull = true
f.NullZero = true
if !f.Tag.HasOption("allowzero") {
f.NullZero = true
}
}
func indexEqual(ind1, ind2 []int) bool {

View file

@ -207,6 +207,9 @@ func scanString(dest reflect.Value, src interface{}) error {
case []byte:
dest.SetString(string(src))
return nil
case time.Time:
dest.SetString(src.Format(time.RFC3339Nano))
return nil
}
return fmt.Errorf("bun: can't scan %#v into %s", src, dest.Type())
}

View file

@ -109,17 +109,23 @@ func (tm *NullTime) Scan(src interface{}) error {
}
switch src := src.(type) {
case time.Time:
tm.Time = src
return nil
case string:
newtm, err := internal.ParseTime(src)
if err != nil {
return err
}
tm.Time = newtm
return nil
case []byte:
newtm, err := internal.ParseTime(internal.String(src))
if err != nil {
return err
}
tm.Time = newtm
return nil
case time.Time:
tm.Time = src
return nil
default:
return fmt.Errorf("bun: can't scan %#v into NullTime", src)
}

View file

@ -181,17 +181,17 @@ func (t *Table) initFields() {
t.FieldMap = make(map[string]*Field, t.Type.NumField())
t.addFields(t.Type, nil)
if len(t.PKs) > 0 {
return
}
for _, name := range []string{"id", "uuid", "pk_" + t.ModelName} {
if field, ok := t.FieldMap[name]; ok {
field.markAsPK()
t.PKs = []*Field{field}
t.DataFields = removeField(t.DataFields, field)
break
if len(t.PKs) == 0 {
for _, name := range []string{"id", "uuid", "pk_" + t.ModelName} {
if field, ok := t.FieldMap[name]; ok {
field.markAsPK()
t.PKs = []*Field{field}
t.DataFields = removeField(t.DataFields, field)
break
}
}
}
if len(t.PKs) == 1 {
pk := t.PKs[0]
if pk.SQLDefault != "" {