summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/schema
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/uptrace/bun/schema')
-rw-r--r--vendor/github.com/uptrace/bun/schema/scan.go47
-rw-r--r--vendor/github.com/uptrace/bun/schema/table.go13
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") {