Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: slow queries on some environments #1524

Merged
merged 2 commits into from
Jun 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions apis/shared-dimensions/lib/domain/shared-dimensions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import clownface from 'clownface'
import { isGraphPointer } from 'is-graph-pointer'
import { StreamClient } from 'sparql-http-client/StreamClient'
import { ParsingClient } from 'sparql-http-client/ParsingClient'
import { md } from '@cube-creator/core/namespace'
import env from '../env'
import shapeToQuery, { rewriteTemplates } from '../shapeToQuery'
import { getDynamicProperties } from './shared-dimension'
Expand All @@ -18,7 +19,7 @@ interface GetSharedDimensions {
offset?: number
}

export async function getSharedDimensions<C extends StreamClient | ParsingClient>(client: C, { freetextQuery = '', limit = 10, offset = 0 }: GetSharedDimensions = {}): Promise<C extends StreamClient ? Stream : Quad[]> {
export async function getSharedDimensions(client: StreamClient, { freetextQuery = '', limit = 10, offset = 0 }: GetSharedDimensions = {}): Promise<Quad[]> {
const { constructQuery } = await shapeToQuery()

const shape = await loadShape('dimensions-query-shape')
Expand All @@ -33,7 +34,15 @@ export async function getSharedDimensions<C extends StreamClient | ParsingClient
}))
await rewriteTemplates(shape, variables)

return constructQuery(shape).execute(client) as any
const dataset = await $rdf.dataset().import(await constructQuery(shape).execute(client))
clownface({ dataset })
.has(rdf.type, schema.DefinedTermSet)
.forEach(termSet => {
termSet.addOut(md.export, $rdf.namedNode(`${MANAGED_DIMENSIONS_BASE}dimension/_export?dimension=${termSet.value}`))
termSet.addOut(md.terms, $rdf.namedNode(`${MANAGED_DIMENSIONS_BASE}dimension/_terms?dimension=${termSet.value}`))
})

return dataset.toArray()
}

interface GetSharedTerms {
Expand Down
4 changes: 2 additions & 2 deletions apis/shared-dimensions/lib/handlers/shared-dimensions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import { getSharedDimensions, getSharedTerms } from '../domain/shared-dimensions'
import { create } from '../domain/shared-dimension'
import { store } from '../store'
import { parsingClient } from '../sparql'
import { parsingClient, streamClient } from '../sparql'

Check warning on line 16 in apis/shared-dimensions/lib/handlers/shared-dimensions.ts

View check run for this annotation

Codecov / codecov/patch

apis/shared-dimensions/lib/handlers/shared-dimensions.ts#L16

Added line #L16 was not covered by tests
import env from '../env'
import { rewrite, rewriteTerm } from '../rewrite'
import { postImportedDimension } from './shared-dimension/import'
Expand All @@ -36,7 +36,7 @@

const collection = getCollection({
view: $rdf.namedNode(req.absoluteUrl()),
memberQuads: await getSharedDimensions(parsingClient, queryParams),
memberQuads: await getSharedDimensions(streamClient, queryParams),

Check warning on line 39 in apis/shared-dimensions/lib/handlers/shared-dimensions.ts

View check run for this annotation

Codecov / codecov/patch

apis/shared-dimensions/lib/handlers/shared-dimensions.ts#L39

Added line #L39 was not covered by tests
collectionType: md.SharedDimensions,
memberType: schema.DefinedTermSet,
collection: req.hydra.resource.term,
Expand Down
2 changes: 2 additions & 0 deletions apis/shared-dimensions/lib/shapes/dimensions-query-shape.ttl
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ prefix md: <https://cube-creator.zazuko.com/shared-dimensions/vocab#>
] ;
sh:property
[
sh:deactivated true ;
sh:path md:terms ;
sh:values
[
Expand All @@ -83,6 +84,7 @@ prefix md: <https://cube-creator.zazuko.com/shared-dimensions/vocab#>
] ;
sh:property
[
sh:deactivated true ;
sh:path md:export ;
sh:values
[
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@ describe('@cube-creator/shared-dimensions-api/lib/domain/shared-dimensions @SPAR
describe('getSharedDimensions', () => {
it('returns from all graphs', async () => {
// when
const dataset = await $rdf.dataset()
.import(await getSharedDimensions(mdClients.streamClient))
const dataset = $rdf.dataset([
...await getSharedDimensions(mdClients.streamClient),
])

// then
const termSets = [...dataset.match(null, rdf.type, schema.DefinedTermSet)].map(({ subject }) => subject)
Expand All @@ -28,10 +29,11 @@ describe('@cube-creator/shared-dimensions-api/lib/domain/shared-dimensions @SPAR

it('returns filtered by name', async () => {
// when
const dataset = await $rdf.dataset()
.import(await getSharedDimensions(mdClients.streamClient, {
const dataset = $rdf.dataset([
...await getSharedDimensions(mdClients.streamClient, {
freetextQuery: 'colors',
}))
}),
])

// then
const termSets = [...dataset.match(null, rdf.type, schema.DefinedTermSet)].map(({ subject }) => subject)
Expand Down
Loading