kysely
    Preparing search index...

    Function jsonObjectFrom

    • A SQLite helper for turning a subquery into a JSON object.

      The subquery must only return one row.

      NOTE: This helper only works correctly if you've installed the ParseJSONResultsPlugin. Otherwise the nested selections will be returned as JSON strings.

      The plugin can be installed like this:

      import * as Sqlite from 'better-sqlite3'
      import { Kysely, ParseJSONResultsPlugin, SqliteDialect } from 'kysely'
      import type { Database } from 'type-editor' // imaginary module

      const db = new Kysely<Database>({
      dialect: new SqliteDialect({
      database: new Sqlite(':memory:')
      }),
      plugins: [new ParseJSONResultsPlugin()]
      })
      import { jsonObjectFrom } from 'kysely/helpers/sqlite'

      const result = await db
      .selectFrom('person')
      .select((eb) => [
      'id',
      jsonObjectFrom(
      eb.selectFrom('pet')
      .select(['pet.id as pet_id', 'pet.name'])
      .whereRef('pet.owner_id', '=', 'person.id')
      .where('pet.is_favorite', '=', true)
      ).as('favorite_pet')
      ])
      .execute()

      result[0]?.id
      result[0]?.favorite_pet?.pet_id
      result[0]?.favorite_pet?.name

      The generated SQL (SQLite):

      select "id", (
      select json_object(
      'pet_id', "obj"."pet_id",
      'name', "obj"."name"
      ) from (
      select "pet"."id" as "pet_id", "pet"."name"
      from "pet"
      where "pet"."owner_id" = "person"."id"
      and "pet"."is_favorite" = ?
      ) as obj
      ) as "favorite_pet"
      from "person";

      Type Parameters

      • O

      Returns RawBuilder<Simplify<ShallowDehydrateObject<O>> | null>