Mercurial > gemma
comparison pkg/imports/bn.go @ 2999:b3c3c5b5b7c1
Bottleneck import: Import riverbed materials, too.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 10 Apr 2019 16:44:30 +0200 |
parents | 41f5ac76d642 |
children | 1de0764f6af4 |
comparison
equal
deleted
inserted
replaced
2998:adc8e9ccf706 | 2999:b3c3c5b5b7c1 |
---|---|
79 $11, | 79 $11, |
80 $12, | 80 $12, |
81 $13 | 81 $13 |
82 ) | 82 ) |
83 RETURNING id` | 83 RETURNING id` |
84 | |
85 insertBottleneckMaterialSQL = ` | |
86 INSERT INTO waterway.bottlenecks_riverbed_materials ( | |
87 bottleneck_id, | |
88 riverbed | |
89 ) VALUES ( | |
90 $1, | |
91 $2 | |
92 )` | |
84 ) | 93 ) |
85 | 94 |
86 type bnJobCreator struct{} | 95 type bnJobCreator struct{} |
87 | 96 |
88 func init() { | 97 func init() { |
185 return nil, err | 194 return nil, err |
186 } | 195 } |
187 | 196 |
188 feedback.Info("Found %d bottlenecks for import", len(bns)) | 197 feedback.Info("Found %d bottlenecks for import", len(bns)) |
189 | 198 |
190 var hasStmt, insertStmt, trackStmt *sql.Stmt | 199 var hasStmt, insertStmt, insertMaterialStmt, trackStmt *sql.Stmt |
191 | 200 |
192 for _, x := range []struct { | 201 for _, x := range []struct { |
193 sql string | 202 sql string |
194 stmt **sql.Stmt | 203 stmt **sql.Stmt |
195 }{ | 204 }{ |
196 {hasBottleneckSQL, &hasStmt}, | 205 {hasBottleneckSQL, &hasStmt}, |
197 {insertBottleneckSQL, &insertStmt}, | 206 {insertBottleneckSQL, &insertStmt}, |
207 {insertBottleneckMaterialSQL, &insertMaterialStmt}, | |
198 {trackImportSQL, &trackStmt}, | 208 {trackImportSQL, &trackStmt}, |
199 } { | 209 } { |
200 var err error | 210 var err error |
201 if *x.stmt, err = conn.PrepareContext(ctx, x.sql); err != nil { | 211 if *x.stmt, err = conn.PrepareContext(ctx, x.sql); err != nil { |
202 return nil, err | 212 return nil, err |
209 feedback.Info("Tolerance used to snap waterway axis: %g", tolerance) | 219 feedback.Info("Tolerance used to snap waterway axis: %g", tolerance) |
210 | 220 |
211 for _, bn := range bns { | 221 for _, bn := range bns { |
212 if err := storeBottleneck( | 222 if err := storeBottleneck( |
213 ctx, importID, conn, feedback, bn, &nids, tolerance, | 223 ctx, importID, conn, feedback, bn, &nids, tolerance, |
214 hasStmt, insertStmt, trackStmt); err != nil { | 224 hasStmt, insertStmt, insertMaterialStmt, trackStmt); err != nil { |
215 return nil, err | 225 return nil, err |
216 } | 226 } |
217 } | 227 } |
218 if len(nids) == 0 { | 228 if len(nids) == 0 { |
219 return nil, UnchangedError("No new bottlenecks inserted") | 229 return nil, UnchangedError("No new bottlenecks inserted") |
235 conn *sql.Conn, | 245 conn *sql.Conn, |
236 feedback Feedback, | 246 feedback Feedback, |
237 bn *ifbn.BottleNeckType, | 247 bn *ifbn.BottleNeckType, |
238 nids *[]string, | 248 nids *[]string, |
239 tolerance float64, | 249 tolerance float64, |
240 hasStmt, insertStmt, trackStmt *sql.Stmt, | 250 hasStmt, insertStmt, insertMaterialStmt, trackStmt *sql.Stmt, |
241 ) error { | 251 ) error { |
242 | 252 |
243 tx, err := conn.BeginTx(ctx, nil) | 253 tx, err := conn.BeginTx(ctx, nil) |
244 if err != nil { | 254 if err != nil { |
245 return err | 255 return err |
293 feedback.Warn("Failed to insert '%s' into database", bn.OBJNAM) | 303 feedback.Warn("Failed to insert '%s' into database", bn.OBJNAM) |
294 feedback.Warn(handleError(err).Error()) | 304 feedback.Warn(handleError(err).Error()) |
295 return nil | 305 return nil |
296 } | 306 } |
297 | 307 |
308 if bn.Riverbed != nil { | |
309 for _, material := range bn.Riverbed.Material { | |
310 if material != nil { | |
311 mat := string(*material) | |
312 if _, err := tx.Stmt(insertMaterialStmt).ExecContext( | |
313 ctx, nid, material); err != nil { | |
314 feedback.Warn( | |
315 "Failed to insert riverbed material '%s' for bottleneck '%s'.", | |
316 mat, bn.OBJNAM) | |
317 feedback.Warn(handleError(err).Error()) | |
318 } | |
319 } | |
320 } | |
321 } | |
322 | |
298 if _, err := tx.Stmt(trackStmt).ExecContext( | 323 if _, err := tx.Stmt(trackStmt).ExecContext( |
299 ctx, importID, "waterway.bottlenecks", nid, | 324 ctx, importID, "waterway.bottlenecks", nid, |
300 ); err != nil { | 325 ); err != nil { |
301 return err | 326 return err |
302 } | 327 } |