diff options
Diffstat (limited to 'vendor/github.com/uptrace/bun/schema')
| -rw-r--r-- | vendor/github.com/uptrace/bun/schema/scan.go | 47 | ||||
| -rw-r--r-- | vendor/github.com/uptrace/bun/schema/table.go | 13 |
2 files changed, 54 insertions, 6 deletions
diff --git a/vendor/github.com/uptrace/bun/schema/scan.go b/vendor/github.com/uptrace/bun/schema/scan.go index 9db46cd6f..0c4f8a824 100644 --- a/vendor/github.com/uptrace/bun/schema/scan.go +++ b/vendor/github.com/uptrace/bun/schema/scan.go @@ -5,6 +5,7 @@ import ( "database/sql" "fmt" "net" + "net/netip" "reflect" "strconv" "strings" @@ -102,6 +103,10 @@ func scanner(typ reflect.Type) ScannerFunc { return scanIP case ipNetType: return scanIPNet + case netipAddrType: + return scanNetIpAddr + case netipPrefixType: + return scanNetIpPrefix case jsonRawMessageType: return scanBytes } @@ -413,6 +418,48 @@ func scanIPNet(dest reflect.Value, src interface{}) error { return nil } +func scanNetIpAddr(dest reflect.Value, src interface{}) error { + if src == nil { + return scanNull(dest) + } + + b, err := toBytes(src) + if err != nil { + return err + } + + val, _ := netip.ParseAddr(internal.String(b)) + if !val.IsValid() { + return fmt.Errorf("bun: invalid ip: %q", b) + } + + ptr := dest.Addr().Interface().(*netip.Addr) + *ptr = val + + return nil +} + +func scanNetIpPrefix(dest reflect.Value, src interface{}) error { + if src == nil { + return scanNull(dest) + } + + b, err := toBytes(src) + if err != nil { + return err + } + + val, _ := netip.ParsePrefix(internal.String(b)) + if !val.IsValid() { + return fmt.Errorf("bun: invalid prefix: %q", b) + } + + ptr := dest.Addr().Interface().(*netip.Prefix) + *ptr = val + + return nil +} + func addrScanner(fn ScannerFunc) ScannerFunc { return func(dest reflect.Value, src interface{}) error { if !dest.CanAddr() { diff --git a/vendor/github.com/uptrace/bun/schema/table.go b/vendor/github.com/uptrace/bun/schema/table.go index 93313597b..44d5e5719 100644 --- a/vendor/github.com/uptrace/bun/schema/table.go +++ b/vendor/github.com/uptrace/bun/schema/table.go @@ -1,10 +1,11 @@ package schema import ( + "cmp" "database/sql" "fmt" "reflect" - "sort" + "slices" "strings" "time" @@ -299,15 +300,14 @@ func (t *Table) processFields(typ reflect.Type) { } func sortFieldsByStruct(fields []*Field) { - sort.Slice(fields, func(i, j int) bool { - left, right := fields[i], fields[j] + slices.SortFunc(fields, func(left, right *Field) int { for k := 0; k < len(left.Index) && k < len(right.Index); k++ { - if left.Index[k] != right.Index[k] { - return left.Index[k] < right.Index[k] + if res := cmp.Compare(left.Index[k], right.Index[k]); res != 0 { + return res } } // NOTE: should not reach - return true + return 0 }) } @@ -538,6 +538,7 @@ func (t *Table) newField(sf reflect.StructField, tag tagparser.Tag) *Field { } if tag.HasOption("autoincrement") { field.AutoIncrement = true + field.NotNull = true field.NullZero = true } if tag.HasOption("identity") { |
