kysely
    Preparing search index...

    Class ExpressionWrapper<DB, TB, T>

    An expression with an as method.

    Type Parameters

    • DB
    • TB extends keyof DB
    • T

    Implements

    Index

    Constructors

    Methods

    • Combines this and another expression using AND.

      Also see ExpressionBuilder.and

      const result = await db.selectFrom('person')
      .selectAll()
      .where(eb => eb('first_name', '=', 'Jennifer')
      .and('last_name', '=', 'Aniston')
      .and('age', '>', 40)
      )
      .execute()

      The generated SQL (PostgreSQL):

      select *
      from "person"
      where (
      "first_name" = $1
      and "last_name" = $2
      and "age" > $3
      )

      You can also pass any expression as the only argument to this method:

      const result = await db.selectFrom('person')
      .selectAll()
      .where(eb => eb('first_name', '=', 'Jennifer')
      .and(eb('first_name', '=', 'Sylvester').or('last_name', '=', 'Stallone'))
      .and(eb.exists(
      eb.selectFrom('pet')
      .select('id')
      .whereRef('pet.owner_id', '=', 'person.id')
      ))
      )
      .execute()

      The generated SQL (PostgreSQL):

      select *
      from "person"
      where (
      "first_name" = $1
      and ("first_name" = $2 or "last_name" = $3)
      and exists (
      select "id"
      from "pet"
      where "pet"."owner_id" = "person"."id"
      )
      )

      Type Parameters

      • RE extends
            | string
            | Expression<any>
            | DynamicReferenceBuilder<any>
            | SelectQueryBuilderExpression<Record<string, any>>
            | OperandExpressionFactory<DB, TB, any>
      • VE extends any

      Parameters

      Returns T extends SqlBool
          ? AndWrapper<DB, TB, SqlBool>
          : KyselyTypeError<"and() method can only be called on boolean expressions">

    • Combines this and another expression using AND.

      Also see ExpressionBuilder.and

      const result = await db.selectFrom('person')
      .selectAll()
      .where(eb => eb('first_name', '=', 'Jennifer')
      .and('last_name', '=', 'Aniston')
      .and('age', '>', 40)
      )
      .execute()

      The generated SQL (PostgreSQL):

      select *
      from "person"
      where (
      "first_name" = $1
      and "last_name" = $2
      and "age" > $3
      )

      You can also pass any expression as the only argument to this method:

      const result = await db.selectFrom('person')
      .selectAll()
      .where(eb => eb('first_name', '=', 'Jennifer')
      .and(eb('first_name', '=', 'Sylvester').or('last_name', '=', 'Stallone'))
      .and(eb.exists(
      eb.selectFrom('pet')
      .select('id')
      .whereRef('pet.owner_id', '=', 'person.id')
      ))
      )
      .execute()

      The generated SQL (PostgreSQL):

      select *
      from "person"
      where (
      "first_name" = $1
      and ("first_name" = $2 or "last_name" = $3)
      and exists (
      select "id"
      from "pet"
      where "pet"."owner_id" = "person"."id"
      )
      )

      Type Parameters

      Parameters

      • expression: E

      Returns T extends SqlBool
          ? AndWrapper<DB, TB, SqlBool>
          : KyselyTypeError<"and() method can only be called on boolean expressions">

    • Returns an aliased version of the expression.

      In addition to slapping as "the_alias" to the end of the SQL, this method also provides strict typing:

      const result = await db
      .selectFrom('person')
      .select((eb) =>
      eb('first_name', '=', 'Jennifer').as('is_jennifer')
      )
      .executeTakeFirstOrThrow()

      // `is_jennifer: SqlBool` field exists in the result type.
      console.log(result.is_jennifer)

      The generated SQL (PostgreSQL):

      select "first_name" = $1 as "is_jennifer"
      from "person"

      Type Parameters

      • A extends string

      Parameters

      • alias: A

      Returns AliasedExpression<T, A>

    • Returns an aliased version of the expression.

      In addition to slapping as "the_alias" to the end of the SQL, this method also provides strict typing:

      const result = await db
      .selectFrom('person')
      .select((eb) =>
      eb('first_name', '=', 'Jennifer').as('is_jennifer')
      )
      .executeTakeFirstOrThrow()

      // `is_jennifer: SqlBool` field exists in the result type.
      console.log(result.is_jennifer)

      The generated SQL (PostgreSQL):

      select "first_name" = $1 as "is_jennifer"
      from "person"

      Type Parameters

      • A extends string

      Parameters

      Returns AliasedExpression<T, A>

    • Combines this and another expression using OR.

      Also see ExpressionBuilder.or

      const result = await db.selectFrom('person')
      .selectAll()
      .where(eb => eb('first_name', '=', 'Jennifer')
      .or('first_name', '=', 'Arnold')
      .or('first_name', '=', 'Sylvester')
      )
      .execute()

      The generated SQL (PostgreSQL):

      select *
      from "person"
      where (
      "first_name" = $1
      or "first_name" = $2
      or "first_name" = $3
      )

      You can also pass any expression as the only argument to this method:

      const result = await db.selectFrom('person')
      .selectAll()
      .where(eb => eb('first_name', '=', 'Jennifer')
      .or(eb('first_name', '=', 'Sylvester').and('last_name', '=', 'Stallone'))
      .or(eb.exists(
      eb.selectFrom('pet')
      .select('id')
      .whereRef('pet.owner_id', '=', 'person.id')
      ))
      )
      .execute()

      The generated SQL (PostgreSQL):

      select *
      from "person"
      where (
      "first_name" = $1
      or ("first_name" = $2 and "last_name" = $3)
      or exists (
      select "id"
      from "pet"
      where "pet"."owner_id" = "person"."id"
      )
      )

      Type Parameters

      • RE extends
            | string
            | Expression<any>
            | DynamicReferenceBuilder<any>
            | SelectQueryBuilderExpression<Record<string, any>>
            | OperandExpressionFactory<DB, TB, any>
      • VE extends any

      Parameters

      Returns T extends SqlBool
          ? OrWrapper<DB, TB, SqlBool>
          : KyselyTypeError<"or() method can only be called on boolean expressions">

    • Combines this and another expression using OR.

      Also see ExpressionBuilder.or

      const result = await db.selectFrom('person')
      .selectAll()
      .where(eb => eb('first_name', '=', 'Jennifer')
      .or('first_name', '=', 'Arnold')
      .or('first_name', '=', 'Sylvester')
      )
      .execute()

      The generated SQL (PostgreSQL):

      select *
      from "person"
      where (
      "first_name" = $1
      or "first_name" = $2
      or "first_name" = $3
      )

      You can also pass any expression as the only argument to this method:

      const result = await db.selectFrom('person')
      .selectAll()
      .where(eb => eb('first_name', '=', 'Jennifer')
      .or(eb('first_name', '=', 'Sylvester').and('last_name', '=', 'Stallone'))
      .or(eb.exists(
      eb.selectFrom('pet')
      .select('id')
      .whereRef('pet.owner_id', '=', 'person.id')
      ))
      )
      .execute()

      The generated SQL (PostgreSQL):

      select *
      from "person"
      where (
      "first_name" = $1
      or ("first_name" = $2 and "last_name" = $3)
      or exists (
      select "id"
      from "pet"
      where "pet"."owner_id" = "person"."id"
      )
      )

      Type Parameters

      Parameters

      • expression: E

      Returns T extends SqlBool
          ? OrWrapper<DB, TB, SqlBool>
          : KyselyTypeError<"or() method can only be called on boolean expressions">

    • Creates the OperationNode that describes how to compile this expression into SQL.

      If you are creating a custom expression, it's often easiest to use the sql template tag to build the node:

      import { type Expression, type OperationNode, sql } from 'kysely'

      class SomeExpression<T> implements Expression<T> {
      get expressionType(): T | undefined {
      return undefined
      }

      toOperationNode(): OperationNode {
      return sql`some sql here`.toOperationNode()
      }
      }

      Returns OperationNode