Skip to content

Commit

Permalink
fix: cosmos select with join
Browse files Browse the repository at this point in the history
  • Loading branch information
patroza committed Dec 11, 2023
1 parent 194f39b commit e0a9587
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 31 deletions.
5 changes: 5 additions & 0 deletions .changeset/pink-pumas-accept.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@effect-app/infra": patch
---

fix: cosmos select query when using join
8 changes: 4 additions & 4 deletions packages/infra/_src/services/Repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ export function projectEffect<
E,
{
filter?: QueryBuilder<PM>
select: readonly U[]
select: NonEmptyReadonlyArray<U>
limit?: number
skip?: number
}
Expand All @@ -119,7 +119,7 @@ export function projectEffect<
E,
{
filter?: Filter<PM>
select?: readonly U[]
select?: NonEmptyReadonlyArray<U>
collect?: (t: Pick<PM, U>) => Option<S>
limit?: number
skip?: number
Expand Down Expand Up @@ -164,7 +164,7 @@ export function project<
self: RepositoryBaseC<T, PM, Evt, ItemType>,
map: {
filter?: QueryBuilder<PM>
select: readonly U[]
select: NonEmptyReadonlyArray<U>
limit?: number
skip?: number
}
Expand All @@ -180,7 +180,7 @@ export function project<
self: RepositoryBaseC<T, PM, Evt, ItemType>,
map: {
filter?: Filter<PM>
select?: readonly U[]
select?: NonEmptyReadonlyArray<U>
collect?: (t: Pick<PM, U>) => Option<S>
limit?: number
skip?: number
Expand Down
55 changes: 34 additions & 21 deletions packages/infra/_src/services/Store/Cosmos.ts
Original file line number Diff line number Diff line change
Expand Up @@ -279,28 +279,41 @@ export function makeCosmosStore({ prefix }: StorageConfig) {
)
)
.map((_) => _.flatMap((_) => _))
: Effect(
filter.type === "new-kid"
? buildWhereCosmosQuery3(
filter.build(),
name,
importedMarkerId,
f.select as string[] | undefined,
skip,
limit
)
: buildCosmosQuery(filter, name, importedMarkerId, skip, limit)
)
.tap((q) => logQuery(q))
.flatMap((q) =>
Effect.promise(() =>
container
.items
.query<M>(q)
.fetchAll()
.then(({ resources }) => resources)
)
: (filter.type === "new-kid"
? Effect(buildWhereCosmosQuery3(
filter.build(),
name,
importedMarkerId,
f.select as NonEmptyReadonlyArray<string> | undefined,
skip,
limit
))
.flatMap((q) =>
Effect.promise(() =>
f.select
? container
.items
.query<M>(q)
.fetchAll()
.then(({ resources }) => resources)
: container
.items
.query<{ f: M }>(q)
.fetchAll()
.then(({ resources }) => resources.map((_) => _.f))
)
)
: Effect(buildCosmosQuery(filter, name, importedMarkerId, skip, limit))
.tap((q) => logQuery(q))
.flatMap((q) =>
Effect.promise(() =>
container
.items
.query<{ f: M }>(q)
.fetchAll()
.then(({ resources }) => resources.map((_) => _.f))
)
)))
.withSpan("Cosmos.filter [effect-app/infra/Store]", {
attributes: { "repository.container_id": containerId, "repository.model_name": name }
})
Expand Down
10 changes: 5 additions & 5 deletions packages/infra/_src/services/Store/Cosmos/query.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ export function buildLegacyCosmosQuery<PM>(
const lm = skip !== undefined || limit !== undefined ? `OFFSET ${skip ?? 0} LIMIT ${limit ?? 999999}` : ""
return {
query: `
SELECT *
SELECT f
FROM ${name} f
WHERE f.id != @id AND f.${
String(
Expand Down Expand Up @@ -114,7 +114,7 @@ export function buildWhereCosmosQuery(
const lm = skip !== undefined || limit !== undefined ? `OFFSET ${skip ?? 0} LIMIT ${limit ?? 999999}` : ""
return {
query: `
SELECT *
SELECT f
FROM ${name} f
${
filter
Expand Down Expand Up @@ -227,7 +227,7 @@ export function buildWhereCosmosQuery3(
filter: readonly FilterResult[],
name: string,
importedMarkerId: string,
select?: readonly string[],
select?: NonEmptyReadonlyArray<string>,
skip?: number,
limit?: number
) {
Expand Down Expand Up @@ -362,8 +362,8 @@ export function buildWhereCosmosQuery3(
query: `
SELECT ${
select
? `VALUE {\n${select.map((_) => `${_}: f.${_}`).join(",\n")}\n}`
: "*"
? `${select.map((_) => `f.${_}`).join(", ")}\n}`
: "f"
}
FROM ${name} f
Expand Down
2 changes: 1 addition & 1 deletion packages/infra/_src/services/Store/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ export type FilterJoinSelect = {

export interface FilterArgs<PM extends PersistenceModelType<string>, U extends keyof PM = never> {
filter?: Filter<PM>
select?: readonly U[]
select?: NonEmptyReadonlyArray<U>
limit?: number
skip?: number
}
Expand Down

0 comments on commit e0a9587

Please sign in to comment.