Skip to content

Commit

Permalink
Move the parallelized mapping outside db transaction (#2715)
Browse files Browse the repository at this point in the history
* Move the parallelized mapping outside db transaction

* Remove transaction altogether for single search queries with pmap

---------

Co-authored-by: Benjamin Mwalimu <[email protected]>
  • Loading branch information
LZRS and dubdabasoduba authored Nov 27, 2024
1 parent f684adb commit ce5a2f7
Showing 1 changed file with 31 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -230,50 +230,48 @@ internal class DatabaseImpl(
override suspend fun <R : Resource> search(
query: SearchQuery,
): List<ResourceWithUUID<R>> {
return db.withTransaction {
resourceDao.getResources(SimpleSQLiteQuery(query.query, query.args.toTypedArray())).pmap(
Dispatchers.Default,
) {
ResourceWithUUID(
it.uuid,
FhirContext.forR4Cached().newJsonParser().parseResource(it.serializedResource) as R,
)
}
return resourceDao.getResources(SimpleSQLiteQuery(query.query, query.args.toTypedArray())).pmap(
Dispatchers.Default,
) {
ResourceWithUUID(
it.uuid,
FhirContext.forR4Cached().newJsonParser().parseResource(it.serializedResource) as R,
)
}
}

override suspend fun searchForwardReferencedResources(
query: SearchQuery,
): List<ForwardIncludeSearchResult> {
return db.withTransaction {
resourceDao
.getForwardReferencedResources(SimpleSQLiteQuery(query.query, query.args.toTypedArray()))
.pmap(Dispatchers.Default) {
ForwardIncludeSearchResult(
it.matchingIndex,
it.baseResourceUUID,
FhirContext.forR4Cached().newJsonParser().parseResource(it.serializedResource)
as Resource,
)
}
}
return resourceDao
.getForwardReferencedResources(
SimpleSQLiteQuery(query.query, query.args.toTypedArray()),
)
.pmap(Dispatchers.Default) {
ForwardIncludeSearchResult(
it.matchingIndex,
it.baseResourceUUID,
FhirContext.forR4Cached().newJsonParser().parseResource(it.serializedResource)
as Resource,
)
}
}

override suspend fun searchReverseReferencedResources(
query: SearchQuery,
): List<ReverseIncludeSearchResult> {
return db.withTransaction {
resourceDao
.getReverseReferencedResources(SimpleSQLiteQuery(query.query, query.args.toTypedArray()))
.pmap(Dispatchers.Default) {
ReverseIncludeSearchResult(
it.matchingIndex,
it.baseResourceTypeAndId,
FhirContext.forR4Cached().newJsonParser().parseResource(it.serializedResource)
as Resource,
)
}
}
return resourceDao
.getReverseReferencedResources(
SimpleSQLiteQuery(query.query, query.args.toTypedArray()),
)
.pmap(Dispatchers.Default) {
ReverseIncludeSearchResult(
it.matchingIndex,
it.baseResourceTypeAndId,
FhirContext.forR4Cached().newJsonParser().parseResource(it.serializedResource)
as Resource,
)
}
}

override suspend fun count(query: SearchQuery): Long {
Expand Down

0 comments on commit ce5a2f7

Please sign in to comment.