# HG changeset patch # User Sascha L. Teichmann # Date 1707651429 -3600 # Node ID 03dfbe67584274a347dcbb81488b4b746ce323f9 # Parent 4abbb62d2bed10aedc0e225a7043010611ba372f Simplified version handling. diff -r 4abbb62d2bed -r 03dfbe675842 pkg/imports/sr.go --- a/pkg/imports/sr.go Sun Feb 11 10:25:50 2024 +0100 +++ b/pkg/imports/sr.go Sun Feb 11 12:37:09 2024 +0100 @@ -741,10 +741,11 @@ } if m.SurveyType != models.SurveyTypeMarking { + final.OptimizeForSerialization(-1) + var index []byte var version int - - index, version, err = final.Bytes(nil) + index, version, err = final.Bytes(-1) if err != nil { return nil, err } diff -r 4abbb62d2bed -r 03dfbe675842 pkg/mesh/cache.go --- a/pkg/mesh/cache.go Sun Feb 11 10:25:50 2024 +0100 +++ b/pkg/mesh/cache.go Sun Feb 11 12:37:09 2024 +0100 @@ -48,11 +48,12 @@ const ( directMeshSQL = ` -SELECT mesh_index, mesh_index_version FROM waterway.sounding_results +SELECT mesh_index, coalesce(mesh_index_version, 1) AS mesh_index_version +FROM waterway.sounding_results WHERE id = $1 ` fetchMeshSQL = ` -SELECT mesh_checksum, mesh_index, mesh_index_version +SELECT mesh_checksum, mesh_index, coalesce(mesh_index_version, 1) AS mesh_index_version FROM waterway.sounding_results WHERE bottleneck_id = $1 AND date_info = $2::date AND mesh_checksum IS NOT NULL AND mesh_index IS NOT NULL @@ -62,7 +63,7 @@ WHEN mesh_checksum = $3 THEN NULL ELSE mesh_index END, - mesh_index_version + coalesce(mesh_index_version, 1) AS mesh_index_version FROM waterway.sounding_results WHERE bottleneck_id = $1 AND date_info = $2::date AND mesh_checksum IS NOT NULL AND mesh_index IS NOT NULL @@ -105,17 +106,13 @@ id int64, ) (*STRTree, error) { var data []byte - var version sql.NullInt64 + var version int err := tx.QueryRowContext(ctx, directMeshSQL, id).Scan(&data, &version) if err != nil { return nil, err } - var ver *int64 - if version.Valid { - ver = &version.Int64 - } tree := new(STRTree) - if err := tree.FromBytes(data, ver); err != nil { + if err := tree.FromBytes(data, version); err != nil { return nil, err } return tree, nil @@ -140,7 +137,7 @@ var data []byte var checksum string - var version sql.NullInt64 + var version int if entry == nil { // fetch from database @@ -170,11 +167,7 @@ tree := new(STRTree) - var ver *int64 - if version.Valid { - ver = &version.Int64 - } - if err := tree.FromBytes(data, ver); err != nil { + if err := tree.FromBytes(data, version); err != nil { return nil, err } diff -r 4abbb62d2bed -r 03dfbe675842 pkg/mesh/meshserialize.go --- a/pkg/mesh/meshserialize.go Sun Feb 11 10:25:50 2024 +0100 +++ b/pkg/mesh/meshserialize.go Sun Feb 11 12:37:09 2024 +0100 @@ -27,8 +27,21 @@ const magicHeader = "SR3D" +func coalesceVersion(version int) int { + if version > 0 { + return version + } + return Version +} + +func (s *STRTree) OptimizeForSerialization(version int) { + version = coalesceVersion(version) + // TODO: Implement me! + _ = version +} + // Bytes serializes this tree to a byte slice. -func (s *STRTree) Bytes(version *int) ([]byte, int, error) { +func (s *STRTree) Bytes(version int) ([]byte, int, error) { var buf bytes.Buffer w, err := gzip.NewWriterLevel(&buf, gzip.BestSpeed) @@ -36,13 +49,9 @@ return nil, 0, err } - var ver int + version = coalesceVersion(version) - if version == nil || *version < 0 { - ver = Version - } - - if err := s.serializeVn(w, ver); err != nil { + if err := s.serializeVn(w, version); err != nil { return nil, 0, err } @@ -50,7 +59,7 @@ return nil, 0, err } - return buf.Bytes(), ver, nil + return buf.Bytes(), version, nil } func (s *STRTree) serializeVn(w io.Writer, version int) error { @@ -65,12 +74,14 @@ } // FromBytes restores a STRTree from a binary representation. -func (s *STRTree) FromBytes(data []byte, version *int64) error { +func (s *STRTree) FromBytes(data []byte, version int) error { - if version != nil && *version > Version { + version = coalesceVersion(version) + + if version > Version { return fmt.Errorf( "cannot deserialize mesh version %d. Highest supported version %d", - *version, Version) + version, Version) } r, err := gzip.NewReader(bytes.NewReader(data)) @@ -80,7 +91,7 @@ return s.deserialize(bufio.NewReader(r), version) } -func (s *STRTree) deserialize(r *bufio.Reader, version *int64) error { +func (s *STRTree) deserialize(r *bufio.Reader, version int) error { header, err := r.Peek(8) if err != nil { @@ -88,10 +99,10 @@ } if bytes.HasPrefix(header, []byte(magicHeader)) { - realVersion := int64(binary.LittleEndian.Uint32(header[4:])) - if version != nil && realVersion != *version { + realVersion := int(binary.LittleEndian.Uint32(header[4:])) + if realVersion != version { return fmt.Errorf("sounding result version mismatch: Have %d expect %d", - realVersion, *version) + realVersion, version) } return s.deserializeVn(r, realVersion) } @@ -99,7 +110,7 @@ return s.deserializeV1(r) } -func (s *STRTree) deserializeVn(r *bufio.Reader, version int64) error { +func (s *STRTree) deserializeVn(r *bufio.Reader, version int) error { if version == 1 { return s.deserializeV1(r) }