Skip to content

Commit 98c0520

Browse files
committed
fix: improve insert of concept and observation records
1 parent 94c1dd0 commit 98c0520

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

tests/data_generator/datagenerator.go

+25-6
Original file line numberDiff line numberDiff line change
@@ -241,9 +241,7 @@ func AddConceptAndMaybeAddObservations(nextConceptId int64, concept Concept) {
241241
}
242242
vocabularyId := 124 // just use "OMOP Vocabulary" for now...
243243
// If concept id was already added in this session before, skip inserting it:
244-
if utils.Pos(conceptId, conceptIds) == -1 {
245-
// just in case, remove it if it already exists in DB:
246-
tests.RemoveConcept(models.Omop, conceptId)
244+
if utils.Pos(conceptId, conceptIds) == -1 && !tests.ConceptExists(models.Omop, conceptId) {
247245
// add:
248246
tests.ExecSQLStringOrFail(
249247
fmt.Sprintf(
@@ -292,7 +290,7 @@ func AddObservationForPerson(conceptId int64, concept Concept, personId int64) {
292290
}
293291
valueAsConceptId = concept.PossibleValues[randIndex]
294292
}
295-
tests.ExecSQLStringOrFail(
293+
result := tests.ExecSQLString(
296294
fmt.Sprintf(
297295
"INSERT into %s.observation "+
298296
"(observation_id,person_id,observation_concept_id,value_as_concept_id,value_as_number,observation_date,observation_datetime,observation_type_concept_id) "+
@@ -301,9 +299,20 @@ func AddObservationForPerson(conceptId int64, concept Concept, personId int64) {
301299
tests.GetOmopDataSourceForSourceId(sourceId).Schema,
302300
lastObservationId+1, personId, conceptId, valueAsConceptId, valueAsNumber),
303301
sourceId)
302+
if result.Error != nil {
303+
// fallback, try simpler record without explicitly setting observation_id:
304+
tests.ExecSQLStringOrFail(fmt.Sprintf(
305+
"INSERT into %s.observation "+
306+
"(person_id,observation_concept_id,value_as_concept_id,value_as_number,observation_date,observation_datetime,observation_type_concept_id) "+
307+
"values "+
308+
"(%d,%d,%s,%s,'2000-01-01','2000-01-01 00:00:00',0)",
309+
tests.GetOmopDataSourceForSourceId(sourceId).Schema,
310+
personId, conceptId, valueAsConceptId, valueAsNumber),
311+
sourceId)
312+
}
304313

305314
// add observation period as well:
306-
tests.ExecSQLStringOrFail(
315+
result = tests.ExecSQLString(
307316
fmt.Sprintf(
308317
"INSERT into %s.observation_period "+
309318
"(observation_period_id,person_id,observation_period_start_date,observation_period_end_date,period_type_concept_id) "+
@@ -312,7 +321,17 @@ func AddObservationForPerson(conceptId int64, concept Concept, personId int64) {
312321
tests.GetOmopDataSourceForSourceId(sourceId).Schema,
313322
lastObservationId+1, personId),
314323
sourceId)
315-
324+
if result.Error != nil {
325+
// fallback, try simpler record without explicitly setting observation_id:
326+
tests.ExecSQLStringOrFail(fmt.Sprintf(
327+
"INSERT into %s.observation_period "+
328+
"(person_id,observation_period_start_date,observation_period_end_date,period_type_concept_id) "+
329+
"values "+
330+
"(%d,'1999-01-01','2099-01-01',0)",
331+
tests.GetOmopDataSourceForSourceId(sourceId).Schema,
332+
personId),
333+
sourceId)
334+
}
316335
lastObservationId++
317336
countObservations++
318337
}

tests/testutils.go

+8
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,14 @@ func RemoveConcept(sourceType models.SourceType, conceptId int64) {
194194
" where concept_id =%v", conceptId), GetTestSourceId())
195195
}
196196

197+
func ConceptExists(sourceType models.SourceType, conceptId int64) bool {
198+
dataSource := db.GetAtlasDB()
199+
count := 0
200+
query := fmt.Sprintf("SELECT COUNT(*) FROM %s.concept WHERE concept_id = ?", GetSchemaNameForType(sourceType))
201+
dataSource.Db.Raw(query, conceptId).Scan(&count)
202+
return count > 0
203+
}
204+
197205
func GetInt64AttributeValue[T any](item T, attributeName string) int64 {
198206
r := reflect.ValueOf(item)
199207
f := reflect.Indirect(r).FieldByName(attributeName)

0 commit comments

Comments
 (0)