@@ -31,6 +31,16 @@ const attributes = {
3131 unique : false ,
3232 allowNull : true ,
3333 } ,
34+ group_id_field : {
35+ type : Sequelize . STRING ,
36+ unique : false ,
37+ allowNull : true ,
38+ } ,
39+ feature_id_field : {
40+ type : Sequelize . STRING ,
41+ unique : false ,
42+ allowNull : true ,
43+ } ,
3444 table : {
3545 type : Sequelize . STRING ,
3646 unique : true ,
@@ -51,6 +61,8 @@ function makeNewGeodatasetTable(
5161 num_features ,
5262 startProp ,
5363 endProp ,
64+ groupIdProp ,
65+ featureIdProp ,
5466 action ,
5567 success ,
5668 failure
@@ -71,6 +83,14 @@ function makeNewGeodatasetTable(
7183 type : Sequelize . BIGINT ,
7284 allowNull : true ,
7385 } ,
86+ group_id : {
87+ type : Sequelize . STRING ,
88+ allowNull : true ,
89+ } ,
90+ feature_id : {
91+ type : Sequelize . STRING ,
92+ allowNull : true ,
93+ } ,
7494 geometry_type : {
7595 type : Sequelize . STRING ,
7696 unique : false ,
@@ -86,18 +106,6 @@ function makeNewGeodatasetTable(
86106 timestamps : false ,
87107 } ;
88108
89- if ( startProp != null )
90- attributes . start_time = {
91- type : Sequelize . BIGINT ,
92- allowNull : true ,
93- } ;
94-
95- if ( endProp != null )
96- attributes . end_time = {
97- type : Sequelize . BIGINT ,
98- allowNull : true ,
99- } ;
100-
101109 Geodatasets . findOne ( { where : { name : name } } )
102110 . then ( ( result ) => {
103111 if ( result ) {
@@ -113,6 +121,8 @@ function makeNewGeodatasetTable(
113121 if ( action != "append" ) {
114122 updateThese . start_time_field = startProp ;
115123 updateThese . end_time_field = endProp ;
124+ updateThese . group_id_field = groupIdProp ;
125+ updateThese . feature_id_field = featureIdProp ;
116126 updateThese . num_features = num_features ;
117127 } else {
118128 updateThese . num_features = ( result . num_features || 0 ) + num_features ;
@@ -131,9 +141,11 @@ function makeNewGeodatasetTable(
131141 }
132142 )
133143 . then ( ( ) => {
144+ const promises = [ ] ;
145+
134146 if ( startProp != null || endProp != null ) {
135- sequelize
136- . query (
147+ promises . push (
148+ sequelize . query (
137149 `CREATE INDEX IF NOT EXISTS ${ Utils . forceAlphaNumUnder (
138150 `${ result . dataValues . table } _time_idx`
139151 ) } on ${ Utils . forceAlphaNumUnder (
@@ -147,37 +159,65 @@ function makeNewGeodatasetTable(
147159 replacements : { } ,
148160 }
149161 )
150- . then ( ( ) => {
151- success ( {
152- name : result . dataValues . name ,
153- table : result . dataValues . table ,
154- tableObj : GeodatasetTable ,
155- } ) ;
162+ ) ;
163+ }
156164
157- return null ;
158- } )
159- . catch ( ( err ) => {
160- logger (
161- "error" ,
162- "Failed to recreate temporal index for geodataset table." ,
163- "geodatasets" ,
164- null ,
165- err
166- ) ;
167- failure ( {
168- status : "failure" ,
169- message : "Failed to recreate temporal index" ,
170- } ) ;
165+ if ( groupIdProp != null ) {
166+ promises . push (
167+ sequelize . query (
168+ `CREATE INDEX IF NOT EXISTS ${ Utils . forceAlphaNumUnder (
169+ `${ result . dataValues . table } _group_id_idx`
170+ ) } on ${ Utils . forceAlphaNumUnder (
171+ result . dataValues . table
172+ ) } USING gist (group_id);`,
173+ {
174+ replacements : { } ,
175+ }
176+ )
177+ ) ;
178+ }
179+
180+ if ( featureIdProp != null ) {
181+ promises . push (
182+ sequelize . query (
183+ `CREATE INDEX IF NOT EXISTS ${ Utils . forceAlphaNumUnder (
184+ `${ result . dataValues . table } _feature_id_idx`
185+ ) } on ${ Utils . forceAlphaNumUnder (
186+ result . dataValues . table
187+ ) } USING gist (feature_id);`,
188+ {
189+ replacements : { } ,
190+ }
191+ )
192+ ) ;
193+ }
194+
195+ Promise . all ( promises )
196+ . then ( ( ) => {
197+ success ( {
198+ name : result . dataValues . name ,
199+ table : result . dataValues . table ,
200+ tableObj : GeodatasetTable ,
171201 } ) ;
172- } else {
173- success ( {
174- name : result . dataValues . name ,
175- table : result . dataValues . table ,
176- tableObj : GeodatasetTable ,
202+
203+ return null ;
204+ } )
205+ . catch ( ( err ) => {
206+ logger (
207+ "error" ,
208+ "Failed to recreate some indexes for geodataset table." ,
209+ "geodatasets" ,
210+ null ,
211+ err
212+ ) ;
213+ failure ( {
214+ status : "failure" ,
215+ message : "Failed to recreate some indexes" ,
216+ } ) ;
217+ return null ;
177218 } ) ;
178219
179- return null ;
180- }
220+ return null ;
181221 } )
182222 . catch ( ( err ) => {
183223 logger (
@@ -220,6 +260,8 @@ function makeNewGeodatasetTable(
220260 num_features : num_features ,
221261 start_time_field : startProp ,
222262 end_time_field : endProp ,
263+ group_id_field : groupIdProp ,
264+ feature_id_field : featureIdProp ,
223265 } )
224266 . then ( ( created ) => {
225267 let GeodatasetTable = sequelize . define (
@@ -431,6 +473,44 @@ const up = async () => {
431473 ) ;
432474 return null ;
433475 } ) ;
476+
477+ // group_id_field column
478+ await sequelize
479+ . query (
480+ `ALTER TABLE geodatasets ADD COLUMN IF NOT EXISTS group_id_field varchar(255) NULL;`
481+ )
482+ . then ( ( ) => {
483+ return null ;
484+ } )
485+ . catch ( ( err ) => {
486+ logger (
487+ "error" ,
488+ `Failed to add geodatasets.group_id_field column. DB tables may be out of sync!` ,
489+ "geodatasets" ,
490+ null ,
491+ err
492+ ) ;
493+ return null ;
494+ } ) ;
495+
496+ // feature_id_field column
497+ await sequelize
498+ . query (
499+ `ALTER TABLE geodatasets ADD COLUMN IF NOT EXISTS feature_id_field varchar(255) NULL;`
500+ )
501+ . then ( ( ) => {
502+ return null ;
503+ } )
504+ . catch ( ( err ) => {
505+ logger (
506+ "error" ,
507+ `Failed to add geodatasets.feature_id_field column. DB tables may be out of sync!` ,
508+ "geodatasets" ,
509+ null ,
510+ err
511+ ) ;
512+ return null ;
513+ } ) ;
434514} ;
435515
436516// export User model for use in other files.
0 commit comments