Mercurial > gemma
annotate pkg/imports/bn.go @ 4894:8eb36d0d5bdf fairway-marks-import
Draft implementation of fairway marks import
Currently works (at least) for IENC feature BCNLAT. In order to be able to
store different types of fairway marks, more tables and import types are
needed.
Currently stupidly stores every entry received from the data source. Sorting
out duplicates and invalidating entries removed from the data source needs
to implemented.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Tue, 14 Jan 2020 15:01:42 +0100 |
parents | faabfed7f0e9 |
children | 9f1c33ba3f0a |
rev | line source |
---|---|
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
1 // This is Free Software under GNU Affero General Public License v >= 3.0 |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
2 // without warranty, see README.md and license for details. |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
3 // |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
4 // SPDX-License-Identifier: AGPL-3.0-or-later |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
5 // License-Filename: LICENSES/AGPL-3.0.txt |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
6 // |
2532
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
7 // Copyright (C) 2018, 2019 by via donau |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
8 // – Österreichische Wasserstraßen-Gesellschaft mbH |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
9 // Software engineering by Intevation GmbH |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
10 // |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
11 // Author(s): |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de> |
2532
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
13 // * Tom Gottfried <tom.gottfried@intevation.de> |
3705
7006b92c0334
Handle updates (vs. historized and new versions) separately.
Sascha Wilde <wilde@intevation.de>
parents:
3703
diff
changeset
|
14 // * Sascha Wilde <sascha.wilde@intevation.de> |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
15 |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
16 package imports |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
17 |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
18 import ( |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
19 "context" |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
20 "database/sql" |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
21 "errors" |
1569
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
22 "regexp" |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
23 "strconv" |
3528
b9e331c1e616
Ignore zero length and whitespace-only values
Tom Gottfried <tom@intevation.de>
parents:
3423
diff
changeset
|
24 "strings" |
1569
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
25 "time" |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
26 |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
27 "github.com/jackc/pgx/pgtype" |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
28 |
4102
3d2f02c16765
Request historic bottleneck data from SOAP service
Tom Gottfried <tom@intevation.de>
parents:
4071
diff
changeset
|
29 "gemma.intevation.de/gemma/pkg/common" |
4062
6c760abcff0e
Move handling of PostgreSQL errors to own package
Tom Gottfried <tom@intevation.de>
parents:
4058
diff
changeset
|
30 "gemma.intevation.de/gemma/pkg/pgxutils" |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
31 "gemma.intevation.de/gemma/pkg/soap/ifbn" |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
32 ) |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
33 |
1695
be78b429ef6e
Bottleneck import: Resolved remaining golint issues.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1676
diff
changeset
|
34 // Bottleneck is an import job to import |
be78b429ef6e
Bottleneck import: Resolved remaining golint issues.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1676
diff
changeset
|
35 // bottlenecks from an IFBN SOAP service. |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
36 type Bottleneck struct { |
1695
be78b429ef6e
Bottleneck import: Resolved remaining golint issues.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1676
diff
changeset
|
37 // URL is the URL of the SOAP service. |
be78b429ef6e
Bottleneck import: Resolved remaining golint issues.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1676
diff
changeset
|
38 URL string `json:"url"` |
2563
dc4fae4bdb8f
Expose axis snapping tolerance to users
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
39 // Tolerance used for axis snapping |
dc4fae4bdb8f
Expose axis snapping tolerance to users
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
40 Tolerance float64 `json:"tolerance"` |
1695
be78b429ef6e
Bottleneck import: Resolved remaining golint issues.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1676
diff
changeset
|
41 // Insecure indicates if HTTPS traffic |
be78b429ef6e
Bottleneck import: Resolved remaining golint issues.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1676
diff
changeset
|
42 // should validate certificates or not. |
be78b429ef6e
Bottleneck import: Resolved remaining golint issues.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1676
diff
changeset
|
43 Insecure bool `json:"insecure"` |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
44 } |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
45 |
1696
ad5e1cddaa09
Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1695
diff
changeset
|
46 // BNJobKind is the import queue type identifier. |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
47 const BNJobKind JobKind = "bn" |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
48 |
1572
056a86b24be2
Made bottleneck primary key an int. Attention: This may break something!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1569
diff
changeset
|
49 const ( |
1658
07f996b0e14a
Bottleneck import: Cleaned up source a bit (removed outdated TODOs).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1646
diff
changeset
|
50 insertBottleneckSQL = ` |
3566
4c585b5d4fe8
Introduce hectometer based order for ranges of ISRS location codes
Tom Gottfried <tom@intevation.de>
parents:
3562
diff
changeset
|
51 WITH |
3645
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
52 bounds (b) AS (VALUES (isrs_fromText($6)), (isrs_fromText($7))), |
3566
4c585b5d4fe8
Introduce hectometer based order for ranges of ISRS location codes
Tom Gottfried <tom@intevation.de>
parents:
3562
diff
changeset
|
53 r AS (SELECT isrsrange( |
4c585b5d4fe8
Introduce hectometer based order for ranges of ISRS location codes
Tom Gottfried <tom@intevation.de>
parents:
3562
diff
changeset
|
54 (SELECT b FROM bounds ORDER BY b USING <~ FETCH FIRST ROW ONLY), |
4c585b5d4fe8
Introduce hectometer based order for ranges of ISRS location codes
Tom Gottfried <tom@intevation.de>
parents:
3562
diff
changeset
|
55 (SELECT b FROM bounds ORDER BY b USING >~ FETCH FIRST ROW ONLY)) AS r) |
1572
056a86b24be2
Made bottleneck primary key an int. Attention: This may break something!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1569
diff
changeset
|
56 INSERT INTO waterway.bottlenecks ( |
1569
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
57 bottleneck_id, |
3645
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
58 validity, |
3302
ec6163c6687d
'Historicise' gauges on import
Tom Gottfried <tom@intevation.de>
parents:
3224
diff
changeset
|
59 gauge_location, |
1569
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
60 objnam, |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
61 nobjnm, |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
62 stretch, |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
63 area, |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
64 rb, |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
65 lb, |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
66 responsible_country, |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
67 revisiting_time, |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
68 limiting, |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
69 date_info, |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
70 source_organization |
4069
12f476e91c70
Adapted bn-import to new historization model.
Sascha Wilde <wilde@intevation.de>
parents:
3815
diff
changeset
|
71 ) VALUES ( |
1569
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
72 $1, |
4069
12f476e91c70
Adapted bn-import to new historization model.
Sascha Wilde <wilde@intevation.de>
parents:
3815
diff
changeset
|
73 $2::tstzrange, |
12f476e91c70
Adapted bn-import to new historization model.
Sascha Wilde <wilde@intevation.de>
parents:
3815
diff
changeset
|
74 isrs_fromText($3), |
1569
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
75 $4, |
3645
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
76 $5, |
3566
4c585b5d4fe8
Introduce hectometer based order for ranges of ISRS location codes
Tom Gottfried <tom@intevation.de>
parents:
3562
diff
changeset
|
77 (SELECT r FROM r), |
1631
6ee06eb37fa9
Use new function to calculate bn area.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1611
diff
changeset
|
78 ISRSrange_area( |
3566
4c585b5d4fe8
Introduce hectometer based order for ranges of ISRS location codes
Tom Gottfried <tom@intevation.de>
parents:
3562
diff
changeset
|
79 ISRSrange_axis((SELECT r FROM r), |
3645
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
80 $15), |
2248
cce158db02b0
Input area as multipolygons to generate area from stretch
Tom Gottfried <tom@intevation.de>
parents:
2195
diff
changeset
|
81 (SELECT ST_Collect(CAST(area AS geometry)) |
1902
c4af342be999
Use waterway area as basis for bottleneck area generation.
Sascha Wilde <wilde@intevation.de>
parents:
1754
diff
changeset
|
82 FROM waterway.waterway_area)), |
1569
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
83 $8, |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
84 $9, |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
85 $10, |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
86 $11, |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
87 $12, |
3645
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
88 $13, |
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
89 $14 |
4069
12f476e91c70
Adapted bn-import to new historization model.
Sascha Wilde <wilde@intevation.de>
parents:
3815
diff
changeset
|
90 ) |
3705
7006b92c0334
Handle updates (vs. historized and new versions) separately.
Sascha Wilde <wilde@intevation.de>
parents:
3703
diff
changeset
|
91 RETURNING id |
7006b92c0334
Handle updates (vs. historized and new versions) separately.
Sascha Wilde <wilde@intevation.de>
parents:
3703
diff
changeset
|
92 ` |
7006b92c0334
Handle updates (vs. historized and new versions) separately.
Sascha Wilde <wilde@intevation.de>
parents:
3703
diff
changeset
|
93 |
4130
980f12d3c766
bottleneck import: Fixed detection of identical bottlenecks.
Sascha Wilde <wilde@intevation.de>
parents:
4128
diff
changeset
|
94 // We only check for NOT NULL values, for correct compairison with |
980f12d3c766
bottleneck import: Fixed detection of identical bottlenecks.
Sascha Wilde <wilde@intevation.de>
parents:
4128
diff
changeset
|
95 // values, which might be null (and then muyst not be compairt with `=' |
980f12d3c766
bottleneck import: Fixed detection of identical bottlenecks.
Sascha Wilde <wilde@intevation.de>
parents:
4128
diff
changeset
|
96 // but with `IS NULL' is comlicated and that we are checking more than |
980f12d3c766
bottleneck import: Fixed detection of identical bottlenecks.
Sascha Wilde <wilde@intevation.de>
parents:
4128
diff
changeset
|
97 // only (bottleneck_id, validity, date_info) is luxury already. |
3698
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
98 findExactMatchBottleneckSQL = ` |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
99 WITH |
4130
980f12d3c766
bottleneck import: Fixed detection of identical bottlenecks.
Sascha Wilde <wilde@intevation.de>
parents:
4128
diff
changeset
|
100 bounds (b) AS (VALUES (isrs_fromText($4)), (isrs_fromText($5))), |
3698
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
101 r AS (SELECT isrsrange( |
4130
980f12d3c766
bottleneck import: Fixed detection of identical bottlenecks.
Sascha Wilde <wilde@intevation.de>
parents:
4128
diff
changeset
|
102 (SELECT b FROM bounds ORDER BY b USING <~ FETCH FIRST ROW ONLY), |
980f12d3c766
bottleneck import: Fixed detection of identical bottlenecks.
Sascha Wilde <wilde@intevation.de>
parents:
4128
diff
changeset
|
103 (SELECT b FROM bounds ORDER BY b USING >~ FETCH FIRST ROW ONLY)) AS r) |
3698
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
104 SELECT id FROM waterway.bottlenecks |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
105 WHERE ( |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
106 bottleneck_id, |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
107 validity, |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
108 gauge_location, |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
109 stretch, |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
110 responsible_country, |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
111 limiting, |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
112 date_info, |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
113 source_organization, |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
114 staging_done |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
115 ) = ( SELECT |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
116 $1, |
4069
12f476e91c70
Adapted bn-import to new historization model.
Sascha Wilde <wilde@intevation.de>
parents:
3815
diff
changeset
|
117 $2::tstzrange, |
12f476e91c70
Adapted bn-import to new historization model.
Sascha Wilde <wilde@intevation.de>
parents:
3815
diff
changeset
|
118 isrs_fromText($3), |
3698
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
119 (SELECT r FROM r), |
4130
980f12d3c766
bottleneck import: Fixed detection of identical bottlenecks.
Sascha Wilde <wilde@intevation.de>
parents:
4128
diff
changeset
|
120 $6, |
980f12d3c766
bottleneck import: Fixed detection of identical bottlenecks.
Sascha Wilde <wilde@intevation.de>
parents:
4128
diff
changeset
|
121 $7, |
980f12d3c766
bottleneck import: Fixed detection of identical bottlenecks.
Sascha Wilde <wilde@intevation.de>
parents:
4128
diff
changeset
|
122 $8::timestamptz, |
3698
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
123 $9, |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
124 true |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
125 ) |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
126 ` |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
127 |
4113
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
128 findIntersectingBottleneckSQL = ` |
3705
7006b92c0334
Handle updates (vs. historized and new versions) separately.
Sascha Wilde <wilde@intevation.de>
parents:
3703
diff
changeset
|
129 SELECT id FROM waterway.bottlenecks |
4113
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
130 WHERE (bottleneck_id, staging_done) = ($1, true) |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
131 AND $2::tstzrange && validity |
3645
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
132 ` |
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
133 |
2999
b3c3c5b5b7c1
Bottleneck import: Import riverbed materials, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2765
diff
changeset
|
134 insertBottleneckMaterialSQL = ` |
b3c3c5b5b7c1
Bottleneck import: Import riverbed materials, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2765
diff
changeset
|
135 INSERT INTO waterway.bottlenecks_riverbed_materials ( |
b3c3c5b5b7c1
Bottleneck import: Import riverbed materials, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2765
diff
changeset
|
136 bottleneck_id, |
b3c3c5b5b7c1
Bottleneck import: Import riverbed materials, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2765
diff
changeset
|
137 riverbed |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
138 ) VALUES ($1, $2) |
3666
db87f34805fb
Align bottleneck validity at gauges
Tom Gottfried <tom@intevation.de>
parents:
3665
diff
changeset
|
139 ON CONFLICT (bottleneck_id, riverbed) DO NOTHING |
3645
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
140 ` |
4113
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
141 |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
142 bnStageDoneDeleteSQL = ` |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
143 DELETE FROM waterway.bottlenecks WHERE id IN ( |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
144 SELECT key |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
145 FROM import.track_imports |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
146 WHERE import_id = $1 |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
147 AND relation = 'waterway.bottlenecks'::regclass |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
148 AND deletion |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
149 )` |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
150 |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
151 bnStageDoneSQL = ` |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
152 UPDATE waterway.bottlenecks SET staging_done = true |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
153 WHERE id IN ( |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
154 SELECT key |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
155 FROM import.track_imports |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
156 WHERE import_id = $1 |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
157 AND relation = 'waterway.bottlenecks'::regclass |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
158 AND NOT deletion |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
159 )` |
1572
056a86b24be2
Made bottleneck primary key an int. Attention: This may break something!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1569
diff
changeset
|
160 ) |
1569
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
161 |
4851
faabfed7f0e9
Simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4798
diff
changeset
|
162 // Description gives a short info about relevant facts of this import. |
4798
ca6a5f722471
Added Description method to most imports.
Sascha Wilde <wilde@intevation.de>
parents:
4197
diff
changeset
|
163 func (bn *Bottleneck) Description() (string, error) { |
4851
faabfed7f0e9
Simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4798
diff
changeset
|
164 return bn.URL, nil |
4798
ca6a5f722471
Added Description method to most imports.
Sascha Wilde <wilde@intevation.de>
parents:
4197
diff
changeset
|
165 } |
ca6a5f722471
Added Description method to most imports.
Sascha Wilde <wilde@intevation.de>
parents:
4197
diff
changeset
|
166 |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
167 type bnJobCreator struct{} |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
168 |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
169 func init() { |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
170 RegisterJobCreator(BNJobKind, bnJobCreator{}) |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
171 } |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
172 |
1754
807569b08513
Import queue: Auto acceptance is now a property of the import kind itself and is not configurable any more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1696
diff
changeset
|
173 func (bnJobCreator) Description() string { return "bottlenecks" } |
807569b08513
Import queue: Auto acceptance is now a property of the import kind itself and is not configurable any more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1696
diff
changeset
|
174 |
807569b08513
Import queue: Auto acceptance is now a property of the import kind itself and is not configurable any more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1696
diff
changeset
|
175 func (bnJobCreator) AutoAccept() bool { return false } |
1646
a0982c38eac0
Import queue: Implemented email notifications.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1631
diff
changeset
|
176 |
2187
7c83b5277c1c
Import queue: Removed boilerplate code to deserialize jobs from JSON by making it part of the import queue.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2168
diff
changeset
|
177 func (bnJobCreator) Create() Job { return new(Bottleneck) } |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
178 |
3219
4acbee65275d
Import queue: Split locked dependencies in exclusively and multiple uses.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3164
diff
changeset
|
179 func (bnJobCreator) Depends() [2][]string { |
4acbee65275d
Import queue: Split locked dependencies in exclusively and multiple uses.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3164
diff
changeset
|
180 return [2][]string{ |
4acbee65275d
Import queue: Split locked dependencies in exclusively and multiple uses.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
3164
diff
changeset
|
181 {"bottlenecks", "bottlenecks_riverbed_materials"}, |
3224
bfde4f8dd323
Add missing table dependencies of imports with area generation
Tom Gottfried <tom@intevation.de>
parents:
3219
diff
changeset
|
182 {"gauges", "distance_marks_virtual", "waterway_axis", "waterway_area"}, |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
183 } |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
184 } |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
185 |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
186 // StageDone moves the imported bottleneck out of the staging area. |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
187 func (bnJobCreator) StageDone( |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
188 ctx context.Context, |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
189 tx *sql.Tx, |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
190 id int64, |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
191 ) error { |
4113
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
192 _, err := tx.ExecContext(ctx, bnStageDoneDeleteSQL, id) |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
193 if err == nil { |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
194 _, err = tx.ExecContext(ctx, bnStageDoneSQL, id) |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
195 } |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
196 return err |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
197 } |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
198 |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
199 // CleanUp of a bottleneck import is a NOP. |
1676
4407ecaa2192
Imports: Cosmetics.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1664
diff
changeset
|
200 func (*Bottleneck) CleanUp() error { return nil } |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
201 |
1569
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
202 var rblbRe = regexp.MustCompile(`(..)_(..)`) |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
203 |
2765
41f5ac76d642
BT import: allow for rb and lb to be null.
Sascha Wilde <wilde@intevation.de>
parents:
2752
diff
changeset
|
204 func splitRBLB(s string) (*string, *string) { |
1569
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
205 m := rblbRe.FindStringSubmatch(s) |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
206 if len(m) == 0 { |
2765
41f5ac76d642
BT import: allow for rb and lb to be null.
Sascha Wilde <wilde@intevation.de>
parents:
2752
diff
changeset
|
207 return nil, nil |
1569
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
208 } |
2765
41f5ac76d642
BT import: allow for rb and lb to be null.
Sascha Wilde <wilde@intevation.de>
parents:
2752
diff
changeset
|
209 return &m[1], &m[2] |
1569
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
210 } |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
211 |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
212 // Do executes the actual bottleneck import. |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
213 func (bn *Bottleneck) Do( |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
214 ctx context.Context, |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
215 importID int64, |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
216 conn *sql.Conn, |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
217 feedback Feedback, |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
218 ) (interface{}, error) { |
2195
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
219 |
2253
cfc523c70e90
Uploaded imports: Small code clean-ups.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2248
diff
changeset
|
220 fetch := func() ([]*ifbn.BottleNeckType, error) { |
2195
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
221 client := ifbn.NewIBottleneckService(bn.URL, bn.Insecure, nil) |
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
222 |
4102
3d2f02c16765
Request historic bottleneck data from SOAP service
Tom Gottfried <tom@intevation.de>
parents:
4071
diff
changeset
|
223 req := &ifbn.Export_bn_by_isrs{ |
3d2f02c16765
Request historic bottleneck data from SOAP service
Tom Gottfried <tom@intevation.de>
parents:
4071
diff
changeset
|
224 Period: &ifbn.RequestedPeriod{Date_start: &time.Time{}}, |
3d2f02c16765
Request historic bottleneck data from SOAP service
Tom Gottfried <tom@intevation.de>
parents:
4071
diff
changeset
|
225 } |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
226 |
2195
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
227 resp, err := client.Export_bn_by_isrs(req) |
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
228 if err != nil { |
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
229 return nil, err |
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
230 } |
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
231 |
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
232 if resp.Export_bn_by_isrsResult == nil { |
3562 | 233 return nil, errors.New( |
4177
8b75ac5e243e
Made 'staticcheck' happy with pgxutils package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4147
diff
changeset
|
234 "the requested service returned no bottlenecks") |
2195
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
235 } |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
236 |
2195
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
237 return resp.Export_bn_by_isrsResult.BottleNeckType, nil |
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
238 } |
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
239 |
2563
dc4fae4bdb8f
Expose axis snapping tolerance to users
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
240 return storeBottlenecks(ctx, fetch, importID, conn, feedback, bn.Tolerance) |
2195
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
241 } |
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
242 |
4128
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
243 type bnStmts struct { |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
244 insert *sql.Stmt |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
245 findExactMatch *sql.Stmt |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
246 findIntersecting *sql.Stmt |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
247 insertMaterial *sql.Stmt |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
248 track *sql.Stmt |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
249 } |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
250 |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
251 func (bs *bnStmts) close() { |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
252 for _, s := range []**sql.Stmt{ |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
253 &bs.insert, |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
254 &bs.findExactMatch, |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
255 &bs.findIntersecting, |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
256 &bs.insertMaterial, |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
257 &bs.track, |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
258 } { |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
259 if *s != nil { |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
260 (*s).Close() |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
261 *s = nil |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
262 } |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
263 } |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
264 } |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
265 |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
266 func (bs *bnStmts) prepare(ctx context.Context, conn *sql.Conn) error { |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
267 for _, x := range []struct { |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
268 sql string |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
269 stmt **sql.Stmt |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
270 }{ |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
271 {insertBottleneckSQL, &bs.insert}, |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
272 {findExactMatchBottleneckSQL, &bs.findExactMatch}, |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
273 {findIntersectingBottleneckSQL, &bs.findIntersecting}, |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
274 {insertBottleneckMaterialSQL, &bs.insertMaterial}, |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
275 {trackImportDeletionSQL, &bs.track}, |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
276 } { |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
277 var err error |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
278 if *x.stmt, err = conn.PrepareContext(ctx, x.sql); err != nil { |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
279 return err |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
280 } |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
281 } |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
282 return nil |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
283 } |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
284 |
2195
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
285 func storeBottlenecks( |
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
286 ctx context.Context, |
2253
cfc523c70e90
Uploaded imports: Small code clean-ups.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2248
diff
changeset
|
287 fetch func() ([]*ifbn.BottleNeckType, error), |
2195
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
288 importID int64, |
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
289 conn *sql.Conn, |
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
290 feedback Feedback, |
2563
dc4fae4bdb8f
Expose axis snapping tolerance to users
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
291 tolerance float64, |
2195
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
292 ) (interface{}, error) { |
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
293 start := time.Now() |
3437ceee1529
Uploaded bottleneck import: Implemented in terms of normal bottleneck import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2187
diff
changeset
|
294 |
2253
cfc523c70e90
Uploaded imports: Small code clean-ups.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2248
diff
changeset
|
295 bns, err := fetch() |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
296 if err != nil { |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
297 return nil, err |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
298 } |
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
299 |
1569
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
300 feedback.Info("Found %d bottlenecks for import", len(bns)) |
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
301 |
4128
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
302 var bs bnStmts |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
303 defer bs.close() |
1580
c503d2fa9776
Bottleneck import: Use a prepared statement for import tracking, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1572
diff
changeset
|
304 |
4128
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
305 if err := bs.prepare(ctx, conn); err != nil { |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
306 return nil, err |
1572
056a86b24be2
Made bottleneck primary key an int. Attention: This may break something!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1569
diff
changeset
|
307 } |
056a86b24be2
Made bottleneck primary key an int. Attention: This may break something!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1569
diff
changeset
|
308 |
1611
1835d1c9eb9b
Store bottleneck_id's instead of id's in bottleneck import summary.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1595
diff
changeset
|
309 var nids []string |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
310 seenOldBnIDs := make(map[int64]bool) |
1572
056a86b24be2
Made bottleneck primary key an int. Attention: This may break something!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1569
diff
changeset
|
311 |
2693 | 312 feedback.Info("Tolerance used to snap waterway axis: %g", tolerance) |
313 | |
4119
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
314 tx, err := conn.BeginTx(ctx, nil) |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
315 if err != nil { |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
316 return nil, err |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
317 } |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
318 defer tx.Rollback() |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
319 |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
320 savepoint := Savepoint(ctx, tx, "insert_bottlenck") |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
321 |
1572
056a86b24be2
Made bottleneck primary key an int. Attention: This may break something!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1569
diff
changeset
|
322 for _, bn := range bns { |
2532
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
323 if err := storeBottleneck( |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
324 ctx, tx, |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
325 importID, feedback, bn, |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
326 &nids, seenOldBnIDs, tolerance, |
4128
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
327 &bs, |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
328 savepoint, |
4128
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
329 ); err != nil { |
1572
056a86b24be2
Made bottleneck primary key an int. Attention: This may break something!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1569
diff
changeset
|
330 return nil, err |
056a86b24be2
Made bottleneck primary key an int. Attention: This may break something!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1569
diff
changeset
|
331 } |
056a86b24be2
Made bottleneck primary key an int. Attention: This may break something!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1569
diff
changeset
|
332 } |
4119
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
333 if err = tx.Commit(); err != nil { |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
334 return nil, err |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
335 } |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
336 |
1572
056a86b24be2
Made bottleneck primary key an int. Attention: This may break something!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1569
diff
changeset
|
337 if len(nids) == 0 { |
2532
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
338 return nil, UnchangedError("No new bottlenecks inserted") |
1569
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
339 } |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
340 |
1572
056a86b24be2
Made bottleneck primary key an int. Attention: This may break something!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1569
diff
changeset
|
341 feedback.Info("Storing %d bottlenecks took %s", len(nids), time.Since(start)) |
1906
32c56e6c089a
Stretch import: Added forgotten source file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1902
diff
changeset
|
342 feedback.Info("Import of bottlenecks was successful") |
1569
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
343 summary := struct { |
1611
1835d1c9eb9b
Store bottleneck_id's instead of id's in bottleneck import summary.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1595
diff
changeset
|
344 Bottlenecks []string `json:"bottlenecks"` |
1569
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
345 }{ |
1572
056a86b24be2
Made bottleneck primary key an int. Attention: This may break something!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1569
diff
changeset
|
346 Bottlenecks: nids, |
1569
cf0ca4a9812a
Bottleneck import: Implemented backend to store bottlenecks in database.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
1533
diff
changeset
|
347 } |
1906
32c56e6c089a
Stretch import: Added forgotten source file.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1902
diff
changeset
|
348 return &summary, nil |
1531
24445a618513
Added stub for bottleneck importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
349 } |
2532
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
350 |
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
351 func storeBottleneck( |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
352 ctx context.Context, |
4119
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
353 tx *sql.Tx, |
2532
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
354 importID int64, |
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
355 feedback Feedback, |
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
356 bn *ifbn.BottleNeckType, |
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
357 nids *[]string, |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
358 seenOldBnIDs map[int64]bool, |
2563
dc4fae4bdb8f
Expose axis snapping tolerance to users
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
359 tolerance float64, |
4128
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
360 bs *bnStmts, |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
361 savepoint func(func() error) error, |
2532
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
362 ) error { |
3645
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
363 feedback.Info("Processing %s (%s)", bn.OBJNAM, bn.Bottleneck_id) |
2532
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
364 |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
365 var ( |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
366 tfrom, tto pgtype.Timestamptz |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
367 uBound pgtype.BoundType |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
368 ) |
3679
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
369 |
3645
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
370 if bn.AdditionalData == nil || bn.AdditionalData.KeyValuePair == nil { |
3679
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
371 // This is a workaround for the fact that most BN data does not |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
372 // contain the optional validity information. |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
373 // |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
374 // The current solution makes every change in the data an |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
375 // update, which might be not the best solution. Alternative |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
376 // approaches could include usingthe Date Info of the data as |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
377 // start date, and maybe even inspecting the details of changed |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
378 // data for hints wether an update or historisation with a new |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
379 // version is advisable. |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
380 // |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
381 // Never the less, the current solution "just works" for the |
4113
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
382 // time being and reflects the upstream systems... -- sw |
4134
9864d682ab47
bn-import: Downgraded info on missing validity from Warning to Info.
Sascha Wilde <wilde@intevation.de>
parents:
4133
diff
changeset
|
383 feedback.Info("No validity information, assuming infinite validity.") |
3679
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
384 tfrom.Set(time.Date(1970, time.January, 1, 0, 0, 0, 0, time.UTC)) |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
385 uBound = pgtype.Unbounded |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
386 } else { |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
387 const ( |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
388 fromKey = "Valid_from_date" |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
389 toKey = "Valid_to_date" |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
390 ) |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
391 fromTo := make(map[string]time.Time) |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
392 for _, kv := range bn.AdditionalData.KeyValuePair { |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
393 if kv.Key == fromKey || kv.Key == toKey { |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
394 t, err := time.Parse(time.RFC3339, kv.Value) |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
395 if err != nil { |
3679
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
396 return err |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
397 } |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
398 fromTo[kv.Key] = t |
3645
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
399 } |
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
400 } |
3679
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
401 |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
402 if t, ok := fromTo[fromKey]; ok { |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
403 tfrom.Set(t) |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
404 } else { |
4197
5d7ce7f926eb
Log fatal errors as errors, not warnings, in imports
Tom Gottfried <tom@intevation.de>
parents:
4177
diff
changeset
|
405 feedback.Error("Missing start date") |
3679
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
406 return nil |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
407 } |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
408 |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
409 if t, ok := fromTo[toKey]; ok { |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
410 tto.Set(t) |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
411 uBound = pgtype.Exclusive |
4102
3d2f02c16765
Request historic bottleneck data from SOAP service
Tom Gottfried <tom@intevation.de>
parents:
4071
diff
changeset
|
412 feedback.Info("Valid from %s to %s", |
3d2f02c16765
Request historic bottleneck data from SOAP service
Tom Gottfried <tom@intevation.de>
parents:
4071
diff
changeset
|
413 fromTo[fromKey].Format(common.TimeFormat), |
3d2f02c16765
Request historic bottleneck data from SOAP service
Tom Gottfried <tom@intevation.de>
parents:
4071
diff
changeset
|
414 fromTo[toKey].Format(common.TimeFormat)) |
3679
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
415 } else { |
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
416 uBound = pgtype.Unbounded |
4102
3d2f02c16765
Request historic bottleneck data from SOAP service
Tom Gottfried <tom@intevation.de>
parents:
4071
diff
changeset
|
417 feedback.Info("Valid from %s", |
3d2f02c16765
Request historic bottleneck data from SOAP service
Tom Gottfried <tom@intevation.de>
parents:
4071
diff
changeset
|
418 fromTo[fromKey].Format(common.TimeFormat)) |
3679
0227670dedd5
Use infinite validity for bottlenecks with no validity information.
Sascha Wilde <wilde@intevation.de>
parents:
3666
diff
changeset
|
419 } |
3645
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
420 } |
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
421 |
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
422 validity := pgtype.Tstzrange{ |
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
423 Lower: tfrom, |
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
424 Upper: tto, |
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
425 LowerType: pgtype.Inclusive, |
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
426 UpperType: uBound, |
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
427 Status: pgtype.Present, |
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
428 } |
2532
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
429 |
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
430 rb, lb := splitRBLB(bn.Rb_lb) |
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
431 |
3423
6592396f5061
Make revisiting time of a bottleneck optional
Tom Gottfried <tom@intevation.de>
parents:
3302
diff
changeset
|
432 var revisitingTime *int |
3528
b9e331c1e616
Ignore zero length and whitespace-only values
Tom Gottfried <tom@intevation.de>
parents:
3423
diff
changeset
|
433 if bn.Revisiting_time != nil && |
b9e331c1e616
Ignore zero length and whitespace-only values
Tom Gottfried <tom@intevation.de>
parents:
3423
diff
changeset
|
434 len(strings.TrimSpace(*bn.Revisiting_time)) > 0 { |
3423
6592396f5061
Make revisiting time of a bottleneck optional
Tom Gottfried <tom@intevation.de>
parents:
3302
diff
changeset
|
435 i, err := strconv.Atoi(*bn.Revisiting_time) |
6592396f5061
Make revisiting time of a bottleneck optional
Tom Gottfried <tom@intevation.de>
parents:
3302
diff
changeset
|
436 if err != nil { |
3530 | 437 feedback.Warn( |
438 "Cannot convert given revisiting time '%s' to number of months", | |
3423
6592396f5061
Make revisiting time of a bottleneck optional
Tom Gottfried <tom@intevation.de>
parents:
3302
diff
changeset
|
439 *bn.Revisiting_time) |
6592396f5061
Make revisiting time of a bottleneck optional
Tom Gottfried <tom@intevation.de>
parents:
3302
diff
changeset
|
440 } else { |
6592396f5061
Make revisiting time of a bottleneck optional
Tom Gottfried <tom@intevation.de>
parents:
3302
diff
changeset
|
441 revisitingTime = &i |
6592396f5061
Make revisiting time of a bottleneck optional
Tom Gottfried <tom@intevation.de>
parents:
3302
diff
changeset
|
442 } |
6592396f5061
Make revisiting time of a bottleneck optional
Tom Gottfried <tom@intevation.de>
parents:
3302
diff
changeset
|
443 } |
6592396f5061
Make revisiting time of a bottleneck optional
Tom Gottfried <tom@intevation.de>
parents:
3302
diff
changeset
|
444 |
2532
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
445 var limiting, country string |
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
446 |
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
447 if bn.Limiting_factor != nil { |
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
448 limiting = string(*bn.Limiting_factor) |
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
449 } |
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
450 |
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
451 if bn.Responsible_country != nil { |
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
452 country = string(*bn.Responsible_country) |
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
453 } |
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
454 |
3645
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
455 var materials []string |
2999
b3c3c5b5b7c1
Bottleneck import: Import riverbed materials, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2765
diff
changeset
|
456 if bn.Riverbed != nil { |
b3c3c5b5b7c1
Bottleneck import: Import riverbed materials, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2765
diff
changeset
|
457 for _, material := range bn.Riverbed.Material { |
b3c3c5b5b7c1
Bottleneck import: Import riverbed materials, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2765
diff
changeset
|
458 if material != nil { |
3645
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
459 materials = append(materials, string(*material)) |
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
460 } |
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
461 } |
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
462 } |
02951a62e8c6
'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents:
3566
diff
changeset
|
463 |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
464 // Check if a bottleneck identical to the one we would insert already |
3698
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
465 // exists: |
4128
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
466 var old int64 |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
467 err := tx.StmtContext(ctx, bs.findExactMatch).QueryRowContext( |
4119
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
468 ctx, |
3698
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
469 bn.Bottleneck_id, |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
470 &validity, |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
471 bn.Fk_g_fid, |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
472 bn.From_ISRS, bn.To_ISRS, |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
473 country, |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
474 limiting, |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
475 bn.Date_Info, |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
476 bn.Source, |
4128
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
477 ).Scan(&old) |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
478 switch { |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
479 case err == sql.ErrNoRows: |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
480 // We dont have a matching old. |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
481 case err != nil: |
3698
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
482 return err |
4128
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
483 default: |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
484 // We could check if the materials are also matching -- but per |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
485 // specification the Date_Info would hvae to change on that kind of |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
486 // change anyway. So actually we are already checking more in depth than |
4128
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
487 // required. |
3698
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
488 feedback.Info("unchanged") |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
489 return nil |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
490 } |
063a1883b5cb
Detect and handle unchanged BN during import.
Sascha Wilde <wilde@intevation.de>
parents:
3681
diff
changeset
|
491 |
3815
aa7bede70b96
Added range info to BN import log.
Sascha Wilde <wilde@intevation.de>
parents:
3705
diff
changeset
|
492 // Additional Information, only of interest when we change something, so |
aa7bede70b96
Added range info to BN import log.
Sascha Wilde <wilde@intevation.de>
parents:
3705
diff
changeset
|
493 // it can be used for debugging if something goes wrong... |
aa7bede70b96
Added range info to BN import log.
Sascha Wilde <wilde@intevation.de>
parents:
3705
diff
changeset
|
494 feedback.Info("Range: from %s to %s", bn.From_ISRS, bn.To_ISRS) |
aa7bede70b96
Added range info to BN import log.
Sascha Wilde <wilde@intevation.de>
parents:
3705
diff
changeset
|
495 |
4113
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
496 // Check if the new bottleneck intersects with the validity of existing |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
497 // for the same bottleneck_id we consider this an update and mark the |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
498 // old data for deletion. |
4128
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
499 bns, err := tx.StmtContext(ctx, bs.findIntersecting).QueryContext( |
4113
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
500 ctx, bn.Bottleneck_id, &validity, |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
501 ) |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
502 if err != nil { |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
503 return err |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
504 } |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
505 defer bns.Close() |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
506 |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
507 // Mark old intersecting bottleneck data for deletion. Don't worry about |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
508 // materials, they will be deleted via cascading. |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
509 var oldBnIDs []int64 |
4113
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
510 for bns.Next() { |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
511 var oldID int64 |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
512 err := bns.Scan(&oldID) |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
513 if err != nil { |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
514 return err |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
515 } |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
516 oldBnIDs = append(oldBnIDs, oldID) |
4113
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
517 } |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
518 |
4128
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
519 if err := bns.Err(); err != nil { |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
520 return err |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
521 } |
14706384a464
Cleanup by Sascha L. Teichmann applied.
Sascha Wilde <wilde@intevation.de>
parents:
4119
diff
changeset
|
522 |
4113
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
523 switch { |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
524 case len(oldBnIDs) == 1: |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
525 feedback.Info("Bottleneck '%s' "+ |
4113
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
526 "with intersecting validity already exists: "+ |
3705
7006b92c0334
Handle updates (vs. historized and new versions) separately.
Sascha Wilde <wilde@intevation.de>
parents:
3703
diff
changeset
|
527 "UPDATING", bn.Bottleneck_id) |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
528 case len(oldBnIDs) > 1: |
4113
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
529 // This case is unexpected and should only happen when historic |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
530 // data in the bottleneck service was changed subsequently... |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
531 // We handle it gracefully anyway, but warn. |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
532 feedback.Warn("More than one Bottelneck '%s' "+ |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
533 "with intersecting validity already exists: "+ |
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
534 "REPLACING all of them!", bn.Bottleneck_id) |
3705
7006b92c0334
Handle updates (vs. historized and new versions) separately.
Sascha Wilde <wilde@intevation.de>
parents:
3703
diff
changeset
|
535 } |
4133
eb08fbe33074
Fixed bn-import: never write tracking info to the db if import fails.
Sascha Wilde <wilde@intevation.de>
parents:
4130
diff
changeset
|
536 // We write the actual tracking information for deletion of superseded |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
537 // bottlenecks later to the database -- AFTER the new bottleneck was |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
538 // created successfully. That way, we don't change the database, when |
4133
eb08fbe33074
Fixed bn-import: never write tracking info to the db if import fails.
Sascha Wilde <wilde@intevation.de>
parents:
4130
diff
changeset
|
539 // an error arises during inserting the new data. |
4113
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
540 |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
541 var bnID int64 |
4113
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
542 // Add new BN data: |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
543 if err := savepoint(func() error { |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
544 if err := tx.StmtContext(ctx, bs.insert).QueryRowContext( |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
545 ctx, |
4119
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
546 bn.Bottleneck_id, |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
547 &validity, |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
548 bn.Fk_g_fid, |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
549 bn.OBJNAM, |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
550 bn.NOBJNM, |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
551 bn.From_ISRS, bn.To_ISRS, |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
552 rb, |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
553 lb, |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
554 country, |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
555 revisitingTime, |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
556 limiting, |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
557 bn.Date_Info, |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
558 bn.Source, |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
559 tolerance, |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
560 ).Scan(&bnID); err != nil { |
4119
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
561 return err |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
562 } |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
563 |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
564 // Add new materials |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
565 for _, material := range materials { |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
566 if _, err := tx.StmtContext(ctx, bs.insertMaterial).ExecContext( |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
567 ctx, |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
568 bnID, |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
569 material, |
4119
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
570 ); err != nil { |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
571 return err |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
572 } |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
573 } |
0cf0008070db
bottleneck import: Use a global transaction with savepoints.
Sascha Wilde <wilde@intevation.de>
parents:
4113
diff
changeset
|
574 return nil |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
575 }); err != nil { |
4197
5d7ce7f926eb
Log fatal errors as errors, not warnings, in imports
Tom Gottfried <tom@intevation.de>
parents:
4177
diff
changeset
|
576 feedback.Error(pgxutils.ReadableError{Err: err}.Error()) |
3666
db87f34805fb
Align bottleneck validity at gauges
Tom Gottfried <tom@intevation.de>
parents:
3665
diff
changeset
|
577 return nil |
db87f34805fb
Align bottleneck validity at gauges
Tom Gottfried <tom@intevation.de>
parents:
3665
diff
changeset
|
578 } |
2999
b3c3c5b5b7c1
Bottleneck import: Import riverbed materials, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2765
diff
changeset
|
579 |
4133
eb08fbe33074
Fixed bn-import: never write tracking info to the db if import fails.
Sascha Wilde <wilde@intevation.de>
parents:
4130
diff
changeset
|
580 // Now that adding BNs to staging was successful, write import tracking |
eb08fbe33074
Fixed bn-import: never write tracking info to the db if import fails.
Sascha Wilde <wilde@intevation.de>
parents:
4130
diff
changeset
|
581 // information to database: |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
582 for _, oldID := range oldBnIDs { |
4133
eb08fbe33074
Fixed bn-import: never write tracking info to the db if import fails.
Sascha Wilde <wilde@intevation.de>
parents:
4130
diff
changeset
|
583 // It is possible, that two new bottlenecks intersect with the |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
584 // same old one, therefore we have to handle duplicates in |
4133
eb08fbe33074
Fixed bn-import: never write tracking info to the db if import fails.
Sascha Wilde <wilde@intevation.de>
parents:
4130
diff
changeset
|
585 // oldBnIds. |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
586 if !seenOldBnIDs[oldID] { |
4133
eb08fbe33074
Fixed bn-import: never write tracking info to the db if import fails.
Sascha Wilde <wilde@intevation.de>
parents:
4130
diff
changeset
|
587 if _, err := tx.StmtContext(ctx, bs.track).ExecContext( |
eb08fbe33074
Fixed bn-import: never write tracking info to the db if import fails.
Sascha Wilde <wilde@intevation.de>
parents:
4130
diff
changeset
|
588 ctx, importID, "waterway.bottlenecks", oldID, true, |
eb08fbe33074
Fixed bn-import: never write tracking info to the db if import fails.
Sascha Wilde <wilde@intevation.de>
parents:
4130
diff
changeset
|
589 ); err != nil { |
eb08fbe33074
Fixed bn-import: never write tracking info to the db if import fails.
Sascha Wilde <wilde@intevation.de>
parents:
4130
diff
changeset
|
590 return err |
eb08fbe33074
Fixed bn-import: never write tracking info to the db if import fails.
Sascha Wilde <wilde@intevation.de>
parents:
4130
diff
changeset
|
591 } |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
592 seenOldBnIDs[oldID] = true |
4133
eb08fbe33074
Fixed bn-import: never write tracking info to the db if import fails.
Sascha Wilde <wilde@intevation.de>
parents:
4130
diff
changeset
|
593 } |
eb08fbe33074
Fixed bn-import: never write tracking info to the db if import fails.
Sascha Wilde <wilde@intevation.de>
parents:
4130
diff
changeset
|
594 } |
4146
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
595 |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
596 if _, err := tx.StmtContext(ctx, bs.track).ExecContext( |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
597 ctx, importID, "waterway.bottlenecks", bnID, false, |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
598 ); err != nil { |
f464cbcdf2f2
BN import: More clean-ups. Typo fixes. Code simplifications. Calling conventions ...
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4134
diff
changeset
|
599 return err |
2532
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
600 } |
3705
7006b92c0334
Handle updates (vs. historized and new versions) separately.
Sascha Wilde <wilde@intevation.de>
parents:
3703
diff
changeset
|
601 |
4113
f39d20427e89
WIP: Reworked bottleneck import:
Sascha Wilde <wilde@intevation.de>
parents:
4110
diff
changeset
|
602 *nids = append(*nids, bn.Bottleneck_id) |
2532
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
603 return nil |
452bc714bfd9
Continue importing bottlenecks if one item fails
Tom Gottfried <tom@intevation.de>
parents:
2253
diff
changeset
|
604 } |