annotate pkg/imports/pointwfs.go @ 4974:e1d8217954a0 fairway-marks-import

Ignore fields not used as arguments to prepared statements
author Tom Gottfried <tom@intevation.de>
date Fri, 28 Feb 2020 20:22:25 +0100
parents 67d78b74fe43
children 4bf6cde2d996
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4948
821ae20b6a20 Re-added missing header lines.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4946
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
821ae20b6a20 Re-added missing header lines.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4946
diff changeset
2 // without warranty, see README.md and license for details.
821ae20b6a20 Re-added missing header lines.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4946
diff changeset
3 //
4946
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 //
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 // Copyright (C) 2020 by via donau
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 // Software engineering by Intevation GmbH
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 //
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 // Author(s):
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 // * Tom Gottfried <tom.gottfried@intevation.de>
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 package imports
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 import (
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 "context"
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 "database/sql"
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 "encoding/json"
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 "errors"
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 "fmt"
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23 "io"
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 "time"
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 "gemma.intevation.de/gemma/pkg/models"
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 "gemma.intevation.de/gemma/pkg/wfs"
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 )
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 var (
4961
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
31 ErrFeatureIgnored = errors.New("feature ignored")
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
32 ErrFeatureDuplicated = errors.New("feature duplicated")
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
33 ErrFeaturesUnmodified = errors.New("features unmodified")
4946
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 )
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 type (
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 WFSPointConsumer interface {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 Commit() error
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 Rollback() error
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 NewProperties() interface{}
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 Consume(points pointSlice, properties interface{}, epsg int) error
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 PointWFSJobCreator struct {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 description string
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 depends [2][]string
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 newConsumer func(context.Context, *sql.Conn, Feedback) (WFSPointConsumer, error)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 PointWFSJob struct {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 models.WFSImport
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 creator *PointWFSJobCreator
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 )
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 func (pwjc *PointWFSJobCreator) Description() string {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 return pwjc.description
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62 func (pwjc *PointWFSJobCreator) Depends() [2][]string {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 return pwjc.depends
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66 func (*PointWFSJobCreator) AutoAccept() bool {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67 return true
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
68 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70 // StageDone is a NOP for WFS imports.
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 func (*PointWFSJobCreator) StageDone(context.Context, *sql.Tx, int64) error {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 return nil
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75 func (pwjc *PointWFSJobCreator) Create() Job {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76 return &PointWFSJob{creator: pwjc}
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
79 // Description gives a short info about relevant facts of this import.
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
80 func (pwj *PointWFSJob) Description() (string, error) {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
81 return pwj.URL + "|" + pwj.FeatureType, nil
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
82 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
83
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
84 // CleanUp for WFS imports is a NOP.
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
85 func (*PointWFSJob) CleanUp() error {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
86 return nil
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
87 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
88
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
89 func (pwj *PointWFSJob) Do(
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
90 ctx context.Context,
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
91 importID int64,
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
92 conn *sql.Conn,
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
93 feedback Feedback,
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
94 ) (interface{}, error) {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
95
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
96 start := time.Now()
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
97
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
98 feedback.Info("Import %s", pwj.creator.Description())
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
99
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
100 feedback.Info("Loading capabilities from %s", pwj.URL)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
101 caps, err := wfs.GetCapabilities(pwj.URL)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
102 if err != nil {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
103 feedback.Error("Loading capabilities failed: %v", err)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
104 return nil, err
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
105 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
106
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
107 ft := caps.FindFeatureType(pwj.FeatureType)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
108 if ft == nil {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
109 return nil, fmt.Errorf("unknown feature type '%s'", pwj.FeatureType)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
110 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
111
4953
dd83c2dfffc9 Re-add missing quotation mark
Tom Gottfried <tom@intevation.de>
parents: 4948
diff changeset
112 feedback.Info("Found feature type '%s'", pwj.FeatureType)
4946
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
113
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
114 epsg, err := wfs.CRSToEPSG(ft.DefaultCRS)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
115 if err != nil {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
116 feedback.Error("Unsupported CRS: '%s'", ft.DefaultCRS)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
117 return nil, err
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
118 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
119
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
120 if nilString(pwj.SortBy) != "" {
4954
331a59ebaf54 Fix fairway marks import log
Tom Gottfried <tom@intevation.de>
parents: 4953
diff changeset
121 feedback.Info("Features will be sorted by '%s'", *pwj.SortBy)
4946
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
122 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
123
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
124 dl, err := wfs.GetFeatures(caps, pwj.FeatureType, nilString(pwj.SortBy))
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
125 if err != nil {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
126 feedback.Error("Cannot create GetFeature URLs. %v", err)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
127 return nil, err
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
128 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
129
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
130 var (
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
131 unsupported = stringCounter{}
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
132 missingProperties int
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
133 badProperties int
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
134 dupes int
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
135 features int
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
136 )
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
137
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
138 consumer, err := pwj.creator.newConsumer(ctx, conn, feedback)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
139 if err != nil {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
140 return nil, err
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
141 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
142 defer consumer.Rollback()
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
143
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
144 if err := dl.Download(nilString(pwj.User), nilString(pwj.Password), func(url string, r io.Reader) error {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
145 feedback.Info("Get features from: '%s'", url)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
146 rfc, err := wfs.ParseRawFeatureCollection(r)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
147 if err != nil {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
148 return fmt.Errorf("parsing GetFeature document failed: %v", err)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
149 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
150 if rfc.CRS != nil {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
151 crsName := rfc.CRS.Properties.Name
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
152 if epsg, err = wfs.CRSToEPSG(crsName); err != nil {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
153 feedback.Error("Unsupported CRS: %d", crsName)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
154 return err
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
155 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
156 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
157
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
158 // No features -> ignore.
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
159 if rfc.Features == nil {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
160 return nil
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
161 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
162
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
163 feedback.Info("Using EPSG: %d", epsg)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
164
4954
331a59ebaf54 Fix fairway marks import log
Tom Gottfried <tom@intevation.de>
parents: 4953
diff changeset
165 feedback.Info(
331a59ebaf54 Fix fairway marks import log
Tom Gottfried <tom@intevation.de>
parents: 4953
diff changeset
166 "Found %d features in data source", len(rfc.Features))
331a59ebaf54 Fix fairway marks import log
Tom Gottfried <tom@intevation.de>
parents: 4953
diff changeset
167
4946
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
168 for _, feature := range rfc.Features {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
169 if feature.Properties == nil || feature.Geometry.Coordinates == nil {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
170 missingProperties++
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
171 continue
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
172 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
173
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
174 props := consumer.NewProperties()
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
175 if err := json.Unmarshal(*feature.Properties, props); err != nil {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
176 badProperties++
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
177 continue
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
178 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
179
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
180 switch feature.Geometry.Type {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
181 case "Point":
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
182 var p pointSlice
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
183 if err := json.Unmarshal(*feature.Geometry.Coordinates, &p); err != nil {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
184 return err
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
185 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
186
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
187 err := consumer.Consume(p, props, epsg)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
188 switch {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
189 case err == ErrFeatureDuplicated:
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
190 dupes++
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
191 case err == ErrFeatureIgnored:
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
192 // be silent
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
193 case err != nil:
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
194 return err
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
195 default:
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
196 features++
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
197 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
198
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
199 default:
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
200 unsupported[feature.Geometry.Type]++
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
201 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
202 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
203 return nil
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
204 }); err != nil {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
205 return nil, err
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
206 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
207
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
208 if dupes > 0 {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
209 feedback.Info(
4960
fb48bc6415c0 Restore accidentally changed import log
Tom Gottfried <tom@intevation.de>
parents: 4958
diff changeset
210 "Features outside responsibility area, duplicates or unchanged: %d",
4946
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
211 dupes)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
212 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
213
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
214 if badProperties > 0 {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
215 feedback.Warn("Bad properties: %d", badProperties)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
216 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
217
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
218 if missingProperties > 0 {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
219 feedback.Warn("Missing properties: %d", missingProperties)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
220 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
221
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
222 if len(unsupported) != 0 {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
223 feedback.Warn("Unsupported types found: %s", unsupported)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
224 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
225
4961
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
226 if err = consumer.Commit(); err == nil || err == ErrFeaturesUnmodified {
4946
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
227 feedback.Info("Storing %d features took %s",
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
228 features, time.Since(start))
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
229 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
230
4958
6d5d6b27c3c3 Added pre commit hooks before commiting fairway marks to invalidate old.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4956
diff changeset
231 // Commit before eventually returning UnchangedError because we might
6d5d6b27c3c3 Added pre commit hooks before commiting fairway marks to invalidate old.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4956
diff changeset
232 // have updated last_found
4961
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
233 if features == 0 && err == ErrFeaturesUnmodified {
4956
7cc79c65a9e5 Keep the history of fairway marks
Tom Gottfried <tom@intevation.de>
parents: 4954
diff changeset
234 return nil, UnchangedError("no valid new features found")
7cc79c65a9e5 Keep the history of fairway marks
Tom Gottfried <tom@intevation.de>
parents: 4954
diff changeset
235 }
7cc79c65a9e5 Keep the history of fairway marks
Tom Gottfried <tom@intevation.de>
parents: 4954
diff changeset
236
4961
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
237 if err == ErrFeaturesUnmodified {
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
238 // It's not really an error.
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
239 err = nil
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
240 }
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
241
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
242 return nil, err
4946
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
243 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
244
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
245 type (
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
246 SQLPointConsumer struct {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
247 ctx context.Context
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
248 tx *sql.Tx
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
249 feedback Feedback
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
250 newProperties func() interface{}
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
251 consume func(*SQLPointConsumer, pointSlice, interface{}, int) error
4958
6d5d6b27c3c3 Added pre commit hooks before commiting fairway marks to invalidate old.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4956
diff changeset
252 preCommit func(*SQLPointConsumer) error
4946
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
253 savepoint func(func() error) error
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
254 stmts []*sql.Stmt
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
255 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
256 )
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
257
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
258 func (spc *SQLPointConsumer) Rollback() error {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
259 if tx := spc.tx; tx != nil {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
260 spc.releaseStmts()
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
261 spc.tx = nil
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
262 spc.ctx = nil
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
263 return tx.Rollback()
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
264 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
265 return nil
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
266 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
267
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
268 func (spc *SQLPointConsumer) Commit() error {
4961
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
269 var err error
4946
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
270 if tx := spc.tx; tx != nil {
4958
6d5d6b27c3c3 Added pre commit hooks before commiting fairway marks to invalidate old.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4956
diff changeset
271 if spc.preCommit != nil {
4961
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
272 err = spc.preCommit(spc)
4958
6d5d6b27c3c3 Added pre commit hooks before commiting fairway marks to invalidate old.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4956
diff changeset
273 }
4946
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
274 spc.releaseStmts()
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
275 spc.tx = nil
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
276 spc.ctx = nil
4961
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
277 if err2 := tx.Commit(); err2 != nil {
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
278 // A real error on commit overrules the first.
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
279 err = err2
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
280 }
4946
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
281 }
4961
67d78b74fe43 Be more careful with unchanged errors if features were removed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4960
diff changeset
282 return err
4946
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
283 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
284
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
285 func (spc *SQLPointConsumer) NewProperties() interface{} {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
286 return spc.newProperties()
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
287 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
288
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
289 func (spc *SQLPointConsumer) Consume(
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
290 points pointSlice,
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
291 properties interface{},
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
292 epsg int,
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
293 ) error {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
294 return spc.consume(spc, points, properties, epsg)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
295 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
296
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
297 func newSQLConsumer(
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
298 init func(*SQLPointConsumer) error,
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
299 consume func(*SQLPointConsumer, pointSlice, interface{}, int) error,
4958
6d5d6b27c3c3 Added pre commit hooks before commiting fairway marks to invalidate old.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4956
diff changeset
300 preCommit func(*SQLPointConsumer) error,
4946
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
301 newProperties func() interface{},
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
302
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
303 ) func(context.Context, *sql.Conn, Feedback) (WFSPointConsumer, error) {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
304 return func(ctx context.Context, conn *sql.Conn, feedback Feedback) (WFSPointConsumer, error) {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
305 tx, err := conn.BeginTx(ctx, nil)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
306 if err != nil {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
307 return nil, err
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
308 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
309 spc := &SQLPointConsumer{
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
310 ctx: ctx,
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
311 tx: tx,
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
312 feedback: feedback,
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
313 newProperties: newProperties,
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
314 consume: consume,
4958
6d5d6b27c3c3 Added pre commit hooks before commiting fairway marks to invalidate old.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4956
diff changeset
315 preCommit: preCommit,
4946
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
316 savepoint: Savepoint(ctx, tx, "feature"),
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
317 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
318 if err := init(spc); err != nil {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
319 tx.Rollback()
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
320 return nil, err
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
321 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
322 return spc, nil
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
323 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
324 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
325
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
326 func (spc *SQLPointConsumer) releaseStmts() {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
327 for i := len(spc.stmts); i > 0; i-- {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
328 spc.stmts[i-1].Close()
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
329 spc.stmts[i-1] = nil
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
330 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
331 spc.stmts = nil
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
332 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
333
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
334 func prepareStmnts(queries ...string) func(*SQLPointConsumer) error {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
335 return func(spc *SQLPointConsumer) error {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
336 for _, query := range queries {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
337 stmt, err := spc.tx.PrepareContext(spc.ctx, query)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
338 if err != nil {
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
339 return err
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
340 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
341 spc.stmts = append(spc.stmts, stmt)
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
342 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
343 return nil
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
344 }
b0dbc0f2c748 Simplified importing of fairway marks.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
345 }