forked from volatiletech/sqlboiler
-
Notifications
You must be signed in to change notification settings - Fork 0
/
box.go
53 lines (41 loc) · 989 Bytes
/
box.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package pgeo
import (
"database/sql/driver"
"errors"
"fmt"
)
// Box is represented by pairs of points that are opposite corners of the box.
type Box [2]Point
// Value for the database
func (b Box) Value() (driver.Value, error) {
return valueBox(b)
}
// Scan from sql query
func (b *Box) Scan(src interface{}) error {
return scanBox(b, src)
}
func valueBox(b Box) (driver.Value, error) {
return fmt.Sprintf(`(%s)`, formatPoints(b[:])), nil
}
func scanBox(b *Box, src interface{}) error {
if src == nil {
*b = NewBox(Point{}, Point{})
return nil
}
points, err := parsePointsSrc(src)
if err != nil {
return err
}
if len(points) != 2 {
return errors.New("wrong box")
}
*b = NewBox(points[0], points[1])
return nil
}
func randBox(nextInt func() int64) Box {
return Box([2]Point{randPoint(nextInt), randPoint(nextInt)})
}
// Randomize for sqlboiler
func (b *Box) Randomize(nextInt func() int64, fieldType string, shouldBeNull bool) {
*b = randBox(nextInt)
}