Skip to content

Commit fa3dfa3

Browse files
committed
Closes #113. Fix large concept set export
1 parent 1ae5811 commit fa3dfa3

File tree

4 files changed

+40
-30
lines changed

4 files changed

+40
-30
lines changed

src/main/java/org/ohdsi/webapi/conceptset/ConceptSetExport.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,7 @@ public class ConceptSetExport {
2323

2424
@JsonProperty("ConceptSetExpression")
2525
public ConceptSetExpression csExpression;
26-
27-
@JsonProperty("ConceptIds")
28-
public Collection<Long> conceptIds;
29-
26+
3027
@JsonProperty("IdentifierConcepts")
3128
public Collection<Concept> identifierConcepts;
3229

src/main/java/org/ohdsi/webapi/service/CohortDefinitionService.java

+2-12
Original file line numberDiff line numberDiff line change
@@ -543,20 +543,10 @@ private ArrayList<ConceptSetExport> getConceptSetExports(CohortDefinition def, S
543543
export.ConceptSetName = cs.name;
544544
export.csExpression = cs.expression;
545545

546-
// Resolve the concept set
547-
export.conceptIds = vocabService.resolveConceptSetExpression(vocabSource.sourceKey, export.csExpression);
548-
549-
// Create an array of concept Ids that will be used in the subsequent calls
550-
long[] conceptIds = new long[export.conceptIds.size()];
551-
Iterator<Long> iter = export.conceptIds.iterator();
552-
for (int j = 0; iter.hasNext(); j++) {
553-
conceptIds[j] = iter.next();
554-
}
555-
556546
// Lookup the identifiers
557-
export.identifierConcepts = vocabService.executeIdentifierLookup(vocabSource.sourceKey, conceptIds);
547+
export.identifierConcepts = vocabService.executeIncludedConceptLookup(vocabSource.sourceKey, cs.expression);
558548
// Lookup the mapped items
559-
export.mappedConcepts = vocabService.executeMappedLookup(vocabSource.sourceKey, conceptIds);
549+
export.mappedConcepts = vocabService.executeMappedLookup(vocabSource.sourceKey, cs.expression);
560550

561551
exports.add(export);
562552
}

src/main/java/org/ohdsi/webapi/service/ConceptSetService.java

+2-14
Original file line numberDiff line numberDiff line change
@@ -222,22 +222,10 @@ private ConceptSetExport getConceptSetForExport(int conceptSetId, SourceInfo voc
222222
// Get the concept set expression
223223
cs.csExpression = this.getConceptSetExpression(conceptSetId);
224224

225-
// Resolve the concept set
226-
cs.conceptIds = vocabService.resolveConceptSetExpression(vocabSource.sourceKey, cs.csExpression);
227-
228-
// Create an array of concept Ids that will be used in the subsequent calls
229-
long[] conceptIds = new long[cs.conceptIds.size()];
230-
Iterator<Long> iter = cs.conceptIds.iterator();
231-
for (int j = 0; iter.hasNext(); j++) {
232-
conceptIds[j] = iter.next();
233-
}
234-
//Java 8 this will be more efficent:
235-
//long[] conceptIds = cs.conceptIds.stream().mapToLong(i->i).toArray();
236-
237225
// Lookup the identifiers
238-
cs.identifierConcepts = vocabService.executeIdentifierLookup(vocabSource.sourceKey, conceptIds);
226+
cs.identifierConcepts = vocabService.executeIncludedConceptLookup(vocabSource.sourceKey, cs.csExpression); //vocabService.executeIdentifierLookup(vocabSource.sourceKey, conceptIds);
239227
// Lookup the mapped items
240-
cs.mappedConcepts = vocabService.executeMappedLookup(vocabSource.sourceKey, conceptIds);
228+
cs.mappedConcepts = vocabService.executeMappedLookup(vocabSource.sourceKey, cs.csExpression);
241229

242230
return cs;
243231
}

src/main/java/org/ohdsi/webapi/service/VocabularyService.java

+35
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,24 @@ public Collection<Concept> executeIdentifierLookup(@PathParam("sourceKey") Strin
9393

9494
return getSourceJdbcTemplate(source).query(sql_statement, this.rowMapper);
9595
}
96+
97+
public Collection<Concept> executeIncludedConceptLookup(String sourceKey, ConceptSetExpression conceptSetExpression) {
98+
Source source = getSourceRepository().findBySourceKey(sourceKey);
99+
String tableQualifier = source.getTableQualifier(SourceDaimon.DaimonType.Vocabulary);
100+
101+
ConceptSetExpressionQueryBuilder builder = new ConceptSetExpressionQueryBuilder();
102+
String query = builder.buildExpressionQuery(conceptSetExpression);
103+
104+
query = SqlRender.renderSql(query, new String[]{"cdm_database_schema"}, new String[]{tableQualifier});
105+
106+
String sql_statement = ResourceHelper.GetResourceAsString("/resources/vocabulary/sql/lookupIdentifiers.sql");
107+
sql_statement = SqlRender.renderSql(sql_statement, new String[]{"identifiers", "CDM_schema"}, new String[]{
108+
query, tableQualifier});
109+
sql_statement = SqlTranslate.translateSql(sql_statement, "sql server", source.getSourceDialect());
110+
111+
return getSourceJdbcTemplate(source).query(sql_statement, this.rowMapper);
112+
}
113+
96114

97115
/**
98116
* @summary Lookup source codes in the specified vocabulary
@@ -151,6 +169,23 @@ public Collection<Concept> executeMappedLookup(@PathParam("sourceKey") String so
151169
return getSourceJdbcTemplate(source).query(sql_statement, this.rowMapper);
152170
}
153171

172+
public Collection<Concept> executeMappedLookup(String sourceKey, ConceptSetExpression conceptSetExpression) {
173+
Source source = getSourceRepository().findBySourceKey(sourceKey);
174+
String tableQualifier = source.getTableQualifier(SourceDaimon.DaimonType.Vocabulary);
175+
176+
ConceptSetExpressionQueryBuilder builder = new ConceptSetExpressionQueryBuilder();
177+
String query = builder.buildExpressionQuery(conceptSetExpression);
178+
179+
query = SqlRender.renderSql(query, new String[]{"cdm_database_schema"}, new String[]{tableQualifier});
180+
181+
String sql_statement = ResourceHelper.GetResourceAsString("/resources/vocabulary/sql/getMappedSourcecodes.sql");
182+
sql_statement = SqlRender.renderSql(sql_statement, new String[]{"identifiers", "CDM_schema"}, new String[]{
183+
query, tableQualifier});
184+
sql_statement = SqlTranslate.translateSql(sql_statement, "sql server", source.getSourceDialect());
185+
186+
return getSourceJdbcTemplate(source).query(sql_statement, this.rowMapper);
187+
}
188+
154189
@Path("search")
155190
@POST
156191
@Produces(MediaType.APPLICATION_JSON)

0 commit comments

Comments
 (0)