Skip to content
This repository was archived by the owner on Dec 13, 2024. It is now read-only.

Commit 5bae430

Browse files
straupthisisaaronlandthisisaaronland
authored
Issue 19: Deprecate -index-alt-files=bool flag, replace with (zero or more) -index_alt=table flags (#20)
* snapshot: start working through issue #19 * add -spelunker-tables flag --------- Co-authored-by: thisisaaronland <devnull@localhost> Co-authored-by: thisisaaronland <thisisaaronland@localhost>
1 parent 5687727 commit 5bae430

File tree

19 files changed

+543
-38
lines changed

19 files changed

+543
-38
lines changed

Makefile

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,15 @@ cli:
99
-o bin/wof-sqlite-index-features-mattn \
1010
-tags "icu json1 fts5" \
1111
cmd/wof-sqlite-index-features-mattn/main.go
12+
13+
debug:
14+
./bin/wof-sqlite-index-features-mattn \
15+
-timings \
16+
-database-uri mattn:///usr/local/data/ca-3.db \
17+
-rtree \
18+
-spr \
19+
-geojson \
20+
-concordances \
21+
-search \
22+
-index-alt geojson \
23+
/usr/local/data/whosonfirst-data-admin-ca

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,10 @@ $> ./bin/wof-sqlite-index-features -h
3333
Index the 'geojson' table
3434
-geometries
3535
Index the 'geometries' table (requires that libspatialite already be installed)
36+
-index-alt value
37+
Zero or more table names where alt geometry files should be indexed.
3638
-index-alt-files
37-
Index alt geometries
39+
Index alt geometries. This flag is deprecated, please use -index-alt=TABLE,TABLE,etc. instead. To index alt geometries in all the applicable tables use -index-alt=*
3840
-index-relations
3941
Index the records related to a feature, specifically wof:belongsto, wof:depicts and wof:involves. Alt files for relations are not indexed at this time.
4042
-index-relations-reader-uri string
@@ -48,7 +50,7 @@ $> ./bin/wof-sqlite-index-features -h
4850
-optimize
4951
Attempt to optimize the database before closing connection (default true)
5052
-processes int
51-
The number of concurrent processes to index data with (default 8)
53+
The number of concurrent processes to index data with (default 16)
5254
-properties
5355
Index the 'properties' table
5456
-rtree
@@ -57,6 +59,8 @@ $> ./bin/wof-sqlite-index-features -h
5759
Index the 'search' table (using SQLite FTS4 full-text indexer)
5860
-spatial-tables
5961
If true then index the necessary tables for use with the whosonfirst/go-whosonfirst-spatial-sqlite package.
62+
-spelunker-tables
63+
If true then index the necessary tables for use with the whosonfirst/go-whosonfirst-spelunker packages
6064
-spr
6165
Index the 'spr' table
6266
-strict-alt-files

app/index/app.go

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,26 @@ import (
66
"fmt"
77
"log"
88
"runtime"
9+
"slices"
910

1011
"github.com/aaronland/go-sqlite/v2"
1112
"github.com/sfomuseum/go-flags/flagset"
1213
"github.com/whosonfirst/go-reader"
14+
sql_tables "github.com/whosonfirst/go-whosonfirst-sql/tables"
1315
"github.com/whosonfirst/go-whosonfirst-sqlite-features-index/v2"
1416
"github.com/whosonfirst/go-whosonfirst-sqlite-features/v2/tables"
1517
sql_index "github.com/whosonfirst/go-whosonfirst-sqlite-index/v4"
1618
)
1719

20+
const index_alt_all string = "*"
21+
1822
func Run(ctx context.Context, logger *log.Logger) error {
1923
fs := DefaultFlagSet()
2024
return RunWithFlagSet(ctx, fs, logger)
2125
}
2226

27+
// To do: Add RunWithOptions...
28+
2329
func RunWithFlagSet(ctx context.Context, fs *flag.FlagSet, logger *log.Logger) error {
2430

2531
flagset.Parse(fs)
@@ -33,6 +39,15 @@ func RunWithFlagSet(ctx context.Context, fs *flag.FlagSet, logger *log.Logger) e
3339
spr = true
3440
}
3541

42+
if spelunker_tables {
43+
rtree = true
44+
spr = true
45+
geojson = true
46+
concordances = true
47+
ancestors = true
48+
search = true
49+
}
50+
3651
db, err := sqlite.NewDatabase(ctx, db_uri)
3752

3853
if err != nil {
@@ -63,7 +78,6 @@ func RunWithFlagSet(ctx context.Context, fs *flag.FlagSet, logger *log.Logger) e
6378
}()
6479

6580
} else {
66-
6781
defer db.Close(ctx)
6882
}
6983

@@ -83,15 +97,19 @@ func RunWithFlagSet(ctx context.Context, fs *flag.FlagSet, logger *log.Logger) e
8397
geojson_opts, err := tables.DefaultGeoJSONTableOptions()
8498

8599
if err != nil {
86-
return fmt.Errorf("failed to create 'geojson' table options because %s", err)
100+
return fmt.Errorf("failed to create '%s' table options because %s", sql_tables.GEOJSON_TABLE_NAME, err)
87101
}
88102

89-
geojson_opts.IndexAltFiles = alt_files
103+
// alt_files is deprecated (20240229/straup)
104+
105+
if alt_files || slices.Contains(index_alt, sql_tables.GEOJSON_TABLE_NAME) || slices.Contains(index_alt, index_alt_all) {
106+
geojson_opts.IndexAltFiles = true
107+
}
90108

91109
gt, err := tables.NewGeoJSONTableWithDatabaseAndOptions(ctx, db, geojson_opts)
92110

93111
if err != nil {
94-
return fmt.Errorf("failed to create 'geojson' table because %s", err)
112+
return fmt.Errorf("failed to create '%s' table because %s", sql_tables.GEOJSON_TABLE_NAME, err)
95113
}
96114

97115
to_index = append(to_index, gt)
@@ -102,7 +120,7 @@ func RunWithFlagSet(ctx context.Context, fs *flag.FlagSet, logger *log.Logger) e
102120
t, err := tables.NewSupersedesTableWithDatabase(ctx, db)
103121

104122
if err != nil {
105-
return fmt.Errorf("failed to create 'supersedes' table because %s", err)
123+
return fmt.Errorf("failed to create '%s' table because %s", sql_tables.SUPERSEDES_TABLE_NAME, err)
106124
}
107125

108126
to_index = append(to_index, t)
@@ -116,7 +134,11 @@ func RunWithFlagSet(ctx context.Context, fs *flag.FlagSet, logger *log.Logger) e
116134
return fmt.Errorf("failed to create 'rtree' table options because %s", err)
117135
}
118136

119-
rtree_opts.IndexAltFiles = alt_files
137+
// alt_files is deprecated (20240229/straup)
138+
139+
if alt_files || slices.Contains(index_alt, sql_tables.RTREE_TABLE_NAME) || slices.Contains(index_alt, index_alt_all) {
140+
rtree_opts.IndexAltFiles = true
141+
}
120142

121143
gt, err := tables.NewRTreeTableWithDatabaseAndOptions(ctx, db, rtree_opts)
122144

@@ -135,7 +157,11 @@ func RunWithFlagSet(ctx context.Context, fs *flag.FlagSet, logger *log.Logger) e
135157
return fmt.Errorf("failed to create 'properties' table options because %s", err)
136158
}
137159

138-
properties_opts.IndexAltFiles = alt_files
160+
// alt_files is deprecated (20240229/straup)
161+
162+
if alt_files || slices.Contains(index_alt, sql_tables.PROPERTIES_TABLE_NAME) || slices.Contains(index_alt, index_alt_all) {
163+
properties_opts.IndexAltFiles = true
164+
}
139165

140166
gt, err := tables.NewPropertiesTableWithDatabaseAndOptions(ctx, db, properties_opts)
141167

@@ -151,15 +177,19 @@ func RunWithFlagSet(ctx context.Context, fs *flag.FlagSet, logger *log.Logger) e
151177
spr_opts, err := tables.DefaultSPRTableOptions()
152178

153179
if err != nil {
154-
return fmt.Errorf("Failed to create 'spr' table options because %v", err)
180+
return fmt.Errorf("Failed to create '%s' table options because %v", sql_tables.SPR_TABLE_NAME, err)
155181
}
156182

157-
spr_opts.IndexAltFiles = alt_files
183+
// alt_files is deprecated (20240229/straup)
184+
185+
if alt_files || slices.Contains(index_alt, sql_tables.SPR_TABLE_NAME) || slices.Contains(index_alt, index_alt_all) {
186+
spr_opts.IndexAltFiles = true
187+
}
158188

159189
st, err := tables.NewSPRTableWithDatabaseAndOptions(ctx, db, spr_opts)
160190

161191
if err != nil {
162-
return fmt.Errorf("failed to create 'spr' table because %s", err)
192+
return fmt.Errorf("failed to create '%s' table because %s", sql_tables.SPR_TABLE_NAME, err)
163193
}
164194

165195
to_index = append(to_index, st)
@@ -170,7 +200,7 @@ func RunWithFlagSet(ctx context.Context, fs *flag.FlagSet, logger *log.Logger) e
170200
nm, err := tables.NewNamesTableWithDatabase(ctx, db)
171201

172202
if err != nil {
173-
return fmt.Errorf("failed to create 'names' table because %s", err)
203+
return fmt.Errorf("failed to create '%s' table because %s", sql_tables.NAMES_TABLE_NAME, err)
174204
}
175205

176206
to_index = append(to_index, nm)
@@ -181,7 +211,7 @@ func RunWithFlagSet(ctx context.Context, fs *flag.FlagSet, logger *log.Logger) e
181211
an, err := tables.NewAncestorsTableWithDatabase(ctx, db)
182212

183213
if err != nil {
184-
return fmt.Errorf("failed to create 'ancestors' table because %s", err)
214+
return fmt.Errorf("failed to create '%s' table because %s", sql_tables.ANCESTORS_TABLE_NAME, err)
185215
}
186216

187217
to_index = append(to_index, an)
@@ -192,7 +222,7 @@ func RunWithFlagSet(ctx context.Context, fs *flag.FlagSet, logger *log.Logger) e
192222
cn, err := tables.NewConcordancesTableWithDatabase(ctx, db)
193223

194224
if err != nil {
195-
return fmt.Errorf("failed to create 'concordances' table because %s", err)
225+
return fmt.Errorf("failed to create '%s' table because %s", sql_tables.CONCORDANCES_TABLE_NAME, err)
196226
}
197227

198228
to_index = append(to_index, cn)
@@ -206,15 +236,19 @@ func RunWithFlagSet(ctx context.Context, fs *flag.FlagSet, logger *log.Logger) e
206236
geometries_opts, err := tables.DefaultGeometriesTableOptions()
207237

208238
if err != nil {
209-
return fmt.Errorf("failed to create 'geometries' table options because %v", err)
239+
return fmt.Errorf("failed to create '%s' table options because %v", sql_tables.GEOMETRIES_TABLE_NAME, err)
210240
}
211241

212-
geometries_opts.IndexAltFiles = alt_files
242+
// alt_files is deprecated (20240229/straup)
243+
244+
if alt_files || slices.Contains(index_alt, sql_tables.CONCORDANCES_TABLE_NAME) || slices.Contains(index_alt, index_alt_all) {
245+
geometries_opts.IndexAltFiles = true
246+
}
213247

214248
gm, err := tables.NewGeometriesTableWithDatabaseAndOptions(ctx, db, geometries_opts)
215249

216250
if err != nil {
217-
return fmt.Errorf("failed to create 'geometries' table because %v", err)
251+
return fmt.Errorf("failed to create '%s' table because %v", sql_tables.CONCORDANCES_TABLE_NAME, err)
218252
}
219253

220254
to_index = append(to_index, gm)
@@ -226,6 +260,8 @@ func RunWithFlagSet(ctx context.Context, fs *flag.FlagSet, logger *log.Logger) e
226260

227261
if search {
228262

263+
// ALT FILES...
264+
229265
st, err := tables.NewSearchTableWithDatabase(ctx, db)
230266

231267
if err != nil {

app/index/flags.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"strings"
88

99
"github.com/sfomuseum/go-flags/flagset"
10+
"github.com/sfomuseum/go-flags/multi"
1011
"github.com/whosonfirst/go-whosonfirst-iterate/v2/emitter"
1112
)
1213

@@ -25,7 +26,9 @@ var properties bool
2526
var search bool
2627
var spr bool
2728
var supersedes bool
29+
2830
var spatial_tables bool
31+
var spelunker_tables bool
2932

3033
var live_hard bool
3134
var timings bool
@@ -34,6 +37,8 @@ var optimize bool
3437
var alt_files bool
3538
var strict_alt_files bool
3639

40+
var index_alt multi.MultiString
41+
3742
var index_relations bool
3843
var relations_uri string
3944

@@ -63,12 +68,15 @@ func DefaultFlagSet() *flag.FlagSet {
6368
fs.BoolVar(&supersedes, "supersedes", false, "Index the 'supersedes' table")
6469

6570
fs.BoolVar(&spatial_tables, "spatial-tables", false, "If true then index the necessary tables for use with the whosonfirst/go-whosonfirst-spatial-sqlite package.")
71+
fs.BoolVar(&spelunker_tables, "spelunker-tables", false, "If true then index the necessary tables for use with the whosonfirst/go-whosonfirst-spelunker packages")
6672

6773
fs.BoolVar(&live_hard, "live-hard-die-fast", true, "Enable various performance-related pragmas at the expense of possible (unlikely) database corruption")
6874
fs.BoolVar(&timings, "timings", false, "Display timings during and after indexing")
6975
fs.BoolVar(&optimize, "optimize", true, "Attempt to optimize the database before closing connection")
7076

71-
fs.BoolVar(&alt_files, "index-alt-files", false, "Index alt geometries")
77+
fs.BoolVar(&alt_files, "index-alt-files", false, "Index alt geometries. This flag is deprecated, please use -index-alt=TABLE,TABLE,etc. instead. To index alt geometries in all the applicable tables use -index-alt=*")
78+
fs.Var(&index_alt, "index-alt", "Zero or more table names where alt geometry files should be indexed.")
79+
7280
fs.BoolVar(&strict_alt_files, "strict-alt-files", true, "Be strict when indexing alt geometries")
7381

7482
fs.BoolVar(&index_relations, "index-relations", false, "Index the records related to a feature, specifically wof:belongsto, wof:depicts and wof:involves. Alt files for relations are not indexed at this time.")

go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
module github.com/whosonfirst/go-whosonfirst-sqlite-features-index/v2
22

3-
go 1.21.3
3+
go 1.22
44

55
require (
66
github.com/aaronland/go-sqlite-mattn v0.0.3
77
github.com/aaronland/go-sqlite-modernc v0.0.3
88
github.com/aaronland/go-sqlite/v2 v2.2.0
99
github.com/sfomuseum/go-flags v0.10.0
10-
github.com/tidwall/gjson v1.17.0
10+
github.com/tidwall/gjson v1.17.1
1111
github.com/whosonfirst/go-reader v1.0.2
1212
github.com/whosonfirst/go-reader-http v0.3.1
1313
github.com/whosonfirst/go-whosonfirst-feature v0.0.27
1414
github.com/whosonfirst/go-whosonfirst-iterate-git/v2 v2.1.4
1515
github.com/whosonfirst/go-whosonfirst-iterate/v2 v2.3.4
16-
github.com/whosonfirst/go-whosonfirst-sqlite-features/v2 v2.0.2
16+
github.com/whosonfirst/go-whosonfirst-sql v0.0.3
17+
github.com/whosonfirst/go-whosonfirst-sqlite-features/v2 v2.0.3
1718
github.com/whosonfirst/go-whosonfirst-sqlite-index/v4 v4.0.0
1819
github.com/whosonfirst/go-whosonfirst-uri v1.3.0
1920
)
@@ -55,7 +56,6 @@ require (
5556
github.com/whosonfirst/go-whosonfirst-names v0.1.0 // indirect
5657
github.com/whosonfirst/go-whosonfirst-sources v0.1.0 // indirect
5758
github.com/whosonfirst/go-whosonfirst-spr/v2 v2.3.7 // indirect
58-
github.com/whosonfirst/go-whosonfirst-sql v0.0.2 // indirect
5959
github.com/whosonfirst/walk v0.0.2 // indirect
6060
github.com/xanzy/ssh-agent v0.3.3 // indirect
6161
go.mongodb.org/mongo-driver v1.11.4 // indirect

go.sum

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P
111111
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
112112
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
113113
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
114-
github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM=
115-
github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
114+
github.com/tidwall/gjson v1.17.1 h1:wlYEnwqAHgzmhNUFfw7Xalt2JzQvsMx2Se4PcoFCT/U=
115+
github.com/tidwall/gjson v1.17.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
116116
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
117117
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
118118
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
@@ -143,10 +143,10 @@ github.com/whosonfirst/go-whosonfirst-sources v0.1.0 h1:JuKLa6KWke22jBfJ1pM9WQHo
143143
github.com/whosonfirst/go-whosonfirst-sources v0.1.0/go.mod h1:EUMHyGzUmqPPxlMmOp+28BFeoBdxxE0HCKRd67lkqGM=
144144
github.com/whosonfirst/go-whosonfirst-spr/v2 v2.3.7 h1:1j4IMuVua4/NhqKm2ke16h2V5Z2XiLoOdXbjDrfZb0E=
145145
github.com/whosonfirst/go-whosonfirst-spr/v2 v2.3.7/go.mod h1:I2IqsIutlDrvYp37Xzwk4WGq+m/gLh+gEifiLmH0bac=
146-
github.com/whosonfirst/go-whosonfirst-sql v0.0.2 h1:YkGkDxgeZiu4lhWFu4I/2f9uczgmwpW4wNV67xoRKAo=
147-
github.com/whosonfirst/go-whosonfirst-sql v0.0.2/go.mod h1:sQXkJTPfnxXbOPTCCxGjUydfQqATfEyO4xyxj2pEX3E=
148-
github.com/whosonfirst/go-whosonfirst-sqlite-features/v2 v2.0.2 h1:ppfP8QKV6LMxnTeHgGE2ObJ+Txh99cHXjakDi0ohqHQ=
149-
github.com/whosonfirst/go-whosonfirst-sqlite-features/v2 v2.0.2/go.mod h1:8QuXkCVjJ1wrCESwF2Rr3PvN/4yD6Zkw4QWLSdEesmg=
146+
github.com/whosonfirst/go-whosonfirst-sql v0.0.3 h1:yyAdKO8bjuhnFsV0HHeAprd7HExpZo54/7K2+10kHSg=
147+
github.com/whosonfirst/go-whosonfirst-sql v0.0.3/go.mod h1:sQXkJTPfnxXbOPTCCxGjUydfQqATfEyO4xyxj2pEX3E=
148+
github.com/whosonfirst/go-whosonfirst-sqlite-features/v2 v2.0.3 h1:tDt4MkomZKljI7Q8IYbB7L2XfKy69Y73/qJL/BzbzyY=
149+
github.com/whosonfirst/go-whosonfirst-sqlite-features/v2 v2.0.3/go.mod h1:TUDGyZW2nIWZ4gB7nJ0eTt0+p8izYXhyhoiOf1fOFFY=
150150
github.com/whosonfirst/go-whosonfirst-sqlite-index/v4 v4.0.0 h1:JEDFIFN7bgQJTDAE1Bc0dYbnWUKF4M8Vsjr4AxsqI/A=
151151
github.com/whosonfirst/go-whosonfirst-sqlite-index/v4 v4.0.0/go.mod h1:ZM85QUfMKGRywkWmsT3SfmzMG2vKEzPmQdj3II08IGU=
152152
github.com/whosonfirst/go-whosonfirst-uri v1.3.0 h1:LYOVLqP9rWQxauYVkdw65j5LZxEi8OK0GHh/qCEpX4g=

index.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"context"
55
"fmt"
66
"io"
7-
"log"
7+
"log/slog"
88
"sync"
99

1010
_ "github.com/aaronland/go-sqlite-modernc"
@@ -175,7 +175,7 @@ func SQLiteFeaturesIndexRelationsFuncWithOptions(opts *SQLiteFeaturesIndexRelati
175175
return fmt.Errorf("Failed to open %s, %v", rel_path, err)
176176
}
177177

178-
log.Printf("Failed to read '%s' because '%v'. Strict mode is disabled so skipping\n", rel_path, err)
178+
slog.Debug("Failed to read '%s' because '%v'. Strict mode is disabled so skipping\n", rel_path, err)
179179
continue
180180
}
181181

vendor/github.com/sfomuseum/go-flags/multi/bool.go

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)