Mercurial > gemma
comparison pkg/mesh/cache.go @ 5724:1ea1d3ef2258
Be tolerant in re-generating multi meshes iso areas if mesh data is empty.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 29 May 2024 14:23:37 +0200 |
parents | 03dfbe675842 |
children |
comparison
equal
deleted
inserted
replaced
5723:4c8652a61eab | 5724:1ea1d3ef2258 |
---|---|
14 package mesh | 14 package mesh |
15 | 15 |
16 import ( | 16 import ( |
17 "context" | 17 "context" |
18 "database/sql" | 18 "database/sql" |
19 "errors" | |
20 "fmt" | |
19 "sync" | 21 "sync" |
20 "time" | 22 "time" |
21 ) | 23 ) |
22 | 24 |
23 type ( | 25 type ( |
49 const ( | 51 const ( |
50 directMeshSQL = ` | 52 directMeshSQL = ` |
51 SELECT mesh_index, coalesce(mesh_index_version, 1) AS mesh_index_version | 53 SELECT mesh_index, coalesce(mesh_index_version, 1) AS mesh_index_version |
52 FROM waterway.sounding_results | 54 FROM waterway.sounding_results |
53 WHERE id = $1 | 55 WHERE id = $1 |
56 AND mesh_checksum IS NOT NULL AND mesh_index IS NOT NULL | |
54 ` | 57 ` |
55 fetchMeshSQL = ` | 58 fetchMeshSQL = ` |
56 SELECT mesh_checksum, mesh_index, coalesce(mesh_index_version, 1) AS mesh_index_version | 59 SELECT mesh_checksum, mesh_index, coalesce(mesh_index_version, 1) AS mesh_index_version |
57 FROM waterway.sounding_results | 60 FROM waterway.sounding_results |
58 WHERE bottleneck_id = $1 AND date_info = $2::date | 61 WHERE bottleneck_id = $1 AND date_info = $2::date |
105 tx *sql.Tx, | 108 tx *sql.Tx, |
106 id int64, | 109 id int64, |
107 ) (*STRTree, error) { | 110 ) (*STRTree, error) { |
108 var data []byte | 111 var data []byte |
109 var version int | 112 var version int |
110 err := tx.QueryRowContext(ctx, directMeshSQL, id).Scan(&data, &version) | 113 switch err := tx.QueryRowContext(ctx, directMeshSQL, id).Scan(&data, &version); { |
111 if err != nil { | 114 case errors.Is(err, sql.ErrNoRows): |
112 return nil, err | 115 return nil, nil |
116 case err != nil: | |
117 return nil, fmt.Errorf("fetching mesh from db failed: %w", err) | |
113 } | 118 } |
114 tree := new(STRTree) | 119 tree := new(STRTree) |
115 if err := tree.FromBytes(data, version); err != nil { | 120 if err := tree.FromBytes(data, version); err != nil { |
116 return nil, err | 121 return nil, fmt.Errorf("deserializing mesh failed: %w (version %d)", err, version) |
117 } | 122 } |
118 return tree, nil | 123 return tree, nil |
119 } | 124 } |
120 | 125 |
121 func (c *Cache) get( | 126 func (c *Cache) get( |