Skip to main content
Module

x/kysely_deno_postgres_dialect/mod.ts>kysely.RawBuilder

Kysely dialect for PostgreSQL using the deno-postgres client.
Latest
interface kysely.RawBuilder
implements AliasableExpression<O>
Re-export
import { type kysely } from "https://deno.land/x/kysely_deno_postgres_dialect@v0.27.1/mod.ts";
const { RawBuilder } = kysely;

An instance of this class can be used to create raw SQL snippets or queries.

You shouldn't need to create RawBuilder instances directly. Instead you should use the sql template tag.

Methods

getter
isRawBuilder(): true
as<A extends string>(alias: A): AliasedRawBuilder<O, A>

Returns an aliased version of the SQL 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(
    sql<string>`concat(first_name, ' ', last_name)`.as('full_name')
  )
  .executeTakeFirstOrThrow()

// `full_name: string` field exists in the result type.
console.log(result.full_name)

The generated SQL (PostgreSQL):

select concat(first_name, ' ', last_name) as "full_name"
from "person"

You can also pass in a raw SQL snippet but in that case you must provide the alias as the only type argument:

const values = sql<{ a: number, b: string }>`(values (1, 'foo'))`

// The alias is `t(a, b)` which specifies the column names
// in addition to the table name. We must tell kysely that
// columns of the table can be referenced through `t`
// by providing an explicit type argument.
const aliasedValues = values.as<'t'>(sql`t(a, b)`)

await db
  .insertInto('person')
  .columns(['first_name', 'last_name'])
  .expression(
    db.selectFrom(aliasedValues).select(['t.a', 't.b'])
  )

The generated SQL (PostgreSQL):

insert into "person" ("first_name", "last_name")
from (values (1, 'foo')) as t(a, b)
select "t"."a", "t"."b"
as<A extends string>(alias: Expression<any>): AliasedRawBuilder<O, A>

Returns an aliased version of the expression.

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

const result = await db
  .selectFrom('person')
  .select((eb) =>
    // `eb.fn<string>` returns an AliasableExpression<string>
    eb.fn<string>('concat', ['first_name' eb.val(' '), 'last_name']).as('full_name')
  )
  .executeTakeFirstOrThrow()

// `full_name: string` field exists in the result type.
console.log(result.full_name)

The generated SQL (PostgreSQL):

select
  concat("first_name", $1, "last_name") as "full_name"
from
  "person"

You can also pass in a raw SQL snippet (or any expression) but in that case you must provide the alias as the only type argument:

const values = sql<{ a: number, b: string }>`(values (1, 'foo'))`

// The alias is `t(a, b)` which specifies the column names
// in addition to the table name. We must tell kysely that
// columns of the table can be referenced through `t`
// by providing an explicit type argument.
const aliasedValues = values.as<'t'>(sql`t(a, b)`)

await db
  .insertInto('person')
  .columns(['first_name', 'last_name'])
  .expression(
    db.selectFrom(aliasedValues).select(['t.a', 't.b'])
  )

The generated SQL (PostgreSQL):

insert into "person" ("first_name", "last_name")
from (values (1, 'foo')) as t(a, b)
select "t"."a", "t"."b"
$castTo<T>(): RawBuilder<T>

Change the output type of the raw expression.

This method call doesn't change the SQL in any way. This methods simply returns a copy of this RawBuilder with a new output type.

withPlugin(plugin: KyselyPlugin): RawBuilder<O>

Adds a plugin for this SQL snippet.

compile(executorProvider: QueryExecutorProvider): CompiledQuery<O>

Compiles the builder to a CompiledQuery.

Examples

const { sql } = sql`select * from ${sql.table('person')}`.compile(db)
console.log(sql)
execute(executorProvider: QueryExecutorProvider): Promise<QueryResult<O>>

Executes the raw query.

Examples

const result = await sql`select * from ${sql.table('person')}`.execute(db)
toOperationNode(): RawNode

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:

class SomeExpression<T> implements Expression<T> {
  toOperationNode(): OperationNode {
    return sql`some sql here`.toOperationNode()
  }
}