K
Kysely7mo ago
tzezar

How to narrow type from jsonArrayFrom

Hey! I need to narrow some types from table that works as Single Table Inheritance table. I believe this is possible, but after some fighting with api and syntax I am not sure how to make it. Here is my query: (sorry for polish, Ubiquitous Language with domain masters)
let dokument = await db
.selectFrom('dokument')
.where('id', '=', dokumentId)
.select((eb) => [
"dokument.id",
"dokument.typ",
"dokument.status",
"dokument.wartoscNetto",
"dokument.wartoscBrutto",
"dokument.wartoscVat",
"dokument.zyskMagazynowyNetto",
"dokument.cennikId",
"dokument.magazynId",
"dokument.dostawcaId",
"dokument.dataPrzyjecia",
jsonArrayFrom(
eb.selectFrom('dokumentPozycja as pozycja')
.select((eb) => [
"pozycja.dokumentId",
"pozycja.asortymentId",
"pozycja.ilosc",
"pozycja.nazwaAsortymentu",
jsonArrayFrom(
eb.selectFrom('dokumentPozycjaRozbicie as rozbicie')
.select((eb) => [
"rozbicie.id",
"rozbicie.typ",
"rozbicie.dokumentPozycjaId",
"rozbicie.partiaProduktuId",
"rozbicie.magazynProduktId",
"rozbicie.magazynPartiaProduktuId",
"rozbicie.ruchMagazynowyId",
"rozbicie.cenaNetto",
"rozbicie.cenaBrutto",
"rozbicie.wartoscNetto",
"rozbicie.wartoscBrutto",
"rozbicie.wartoscVat",
"rozbicie.zyskMagazynowyNetto",
"rozbicie.ilosc",
"rozbicie.stawkaVatZakupuId",
"rozbicie.jednostkaMiaryId",
])
.whereRef('rozbicie.dokumentPozycjaId', '=', 'pozycja.id')
.orderBy('rozbicie.id')
).as('rozbicia')
])
.whereRef('pozycja.dokumentId', '=', 'dokument.id')
.orderBy('pozycja.id')
).as('pozycje')
])
.executeTakeFirstOrThrow()
let dokument = await db
.selectFrom('dokument')
.where('id', '=', dokumentId)
.select((eb) => [
"dokument.id",
"dokument.typ",
"dokument.status",
"dokument.wartoscNetto",
"dokument.wartoscBrutto",
"dokument.wartoscVat",
"dokument.zyskMagazynowyNetto",
"dokument.cennikId",
"dokument.magazynId",
"dokument.dostawcaId",
"dokument.dataPrzyjecia",
jsonArrayFrom(
eb.selectFrom('dokumentPozycja as pozycja')
.select((eb) => [
"pozycja.dokumentId",
"pozycja.asortymentId",
"pozycja.ilosc",
"pozycja.nazwaAsortymentu",
jsonArrayFrom(
eb.selectFrom('dokumentPozycjaRozbicie as rozbicie')
.select((eb) => [
"rozbicie.id",
"rozbicie.typ",
"rozbicie.dokumentPozycjaId",
"rozbicie.partiaProduktuId",
"rozbicie.magazynProduktId",
"rozbicie.magazynPartiaProduktuId",
"rozbicie.ruchMagazynowyId",
"rozbicie.cenaNetto",
"rozbicie.cenaBrutto",
"rozbicie.wartoscNetto",
"rozbicie.wartoscBrutto",
"rozbicie.wartoscVat",
"rozbicie.zyskMagazynowyNetto",
"rozbicie.ilosc",
"rozbicie.stawkaVatZakupuId",
"rozbicie.jednostkaMiaryId",
])
.whereRef('rozbicie.dokumentPozycjaId', '=', 'pozycja.id')
.orderBy('rozbicie.id')
).as('rozbicia')
])
.whereRef('pozycja.dokumentId', '=', 'dokument.id')
.orderBy('pozycja.id')
).as('pozycje')
])
.executeTakeFirstOrThrow()
Solution:
oh okey got it, .$narrowType<PrzyjecieZewnetrznePozycjaRozbicieSelect>() has to be straight after jsonArrayFrom not at the top level
Jump to solution
3 Replies
tzezar
tzezarOP7mo ago
any hint is enough for me, please don't waste your time to change the above query
Solution
tzezar
tzezar7mo ago
oh okey got it, .$narrowType<PrzyjecieZewnetrznePozycjaRozbicieSelect>() has to be straight after jsonArrayFrom not at the top level

Did you find this page helpful?