-
Notifications
You must be signed in to change notification settings - Fork 2
/
geometry_test.go
106 lines (89 loc) · 2.74 KB
/
geometry_test.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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package geography
import (
"database/sql/driver"
"testing"
"github.com/davecgh/go-spew/spew"
"github.com/go-courier/sqlx/v2"
"github.com/go-courier/sqlx/v2/builder"
"github.com/go-courier/sqlx/v2/migration"
"github.com/go-courier/sqlx/v2/mysqlconnector"
"github.com/go-courier/sqlx/v2/postgresqlconnector"
"github.com/google/uuid"
"github.com/sirupsen/logrus"
"github.com/stretchr/testify/require"
)
var (
mysqlConnector = &mysqlconnector.MysqlConnector{
Host: "root@tcp(0.0.0.0:3306)",
Extra: "charset=utf8mb4&parseTime=true&interpolateParams=true&autocommit=true&loc=Local",
}
postgresConnector = &postgresqlconnector.PostgreSQLConnector{
Host: "postgres://[email protected]:5432",
Extra: "sslmode=disable",
Extensions: []string{"postgis", "hstore"},
}
)
func init() {
logrus.SetLevel(logrus.DebugLevel)
}
type Geometries struct {
ID string `db:"F_id"`
Point Point `db:"F_point"`
MultiPoint MultiPoint `db:"F_multi_point,null"`
LineString LineString `db:"F_line_string,null"`
MultiLineString MultiLineString `db:"F_multi_line_string,null"`
Polygon Polygon `db:"f_polygon,null"`
MultiPolygon MultiPolygon `db:"f_multi_polygon,null"`
Geometry Geometry `db:"f_geometry"`
}
func (Geometries) PrimaryKey() []string {
return []string{"ID"}
}
func (Geometries) TableName() string {
return "t_geom"
}
func TestGeomRW(t *testing.T) {
tt := require.New(t)
dbGeom := sqlx.NewDatabase("geo")
for _, connector := range []driver.Connector{
postgresConnector,
mysqlConnector,
} {
db := dbGeom.OpenDB(connector)
userTable := dbGeom.Register(&Geometries{})
err := migration.Migrate(db, nil)
tt.NoError(err)
g := Geometries{
ID: uuid.New().String(),
Point: Point{-1, 2},
MultiPoint: MultiPoint{{-1, 2}, {2, 1}},
LineString: LineString{{-1, 2}, {2, 1}},
MultiLineString: MultiLineString{{{-1, 2}, {2, 1}}, {{-1, 2}, {2, 1}}},
Polygon: Polygon{
{{-1, 2}, {2, 1}, {2, 2}, {2, 3}, {-1, 2}},
{{-1, 2}, {2, 1}, {2, 2}, {-1, 2}},
{{-1, 2}, {2, 3}, {2, 4}, {-1, 2}},
},
MultiPolygon: MultiPolygon{{{{-1, 2}, {2, 1}, {-1, 2}, {-1, 2}}}, {{{-1, 2}, {2, 1}, {-1, 2}, {-1, 2}}}},
Geometry: ToGeometry(Point{-1, 2}),
}
_, errInsert := db.ExecExpr(sqlx.InsertToDB(db, g, nil))
tt.NoError(errInsert)
{
gForSelect := Geometries{}
err := db.QueryExprAndScan(
builder.Select(nil).From(
userTable,
builder.Where(userTable.F("ID").Eq(g.ID)),
),
&gForSelect,
)
tt.NoError(err)
spew.Dump(gForSelect)
}
dbGeom.Tables.Range(func(t *builder.Table, idx int) {
_, err := db.ExecExpr(db.Dialect().DropTable(t))
tt.NoError(err)
})
}
}