diff --git a/apps/web/patches/kysely+0.26.3.patch b/apps/web/patches/kysely+0.26.3.patch new file mode 100644 index 000000000..a31525245 --- /dev/null +++ b/apps/web/patches/kysely+0.26.3.patch @@ -0,0 +1,8978 @@ +diff --git a/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.d.ts b/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.d.ts +index dc87916..e3fb628 100644 +--- a/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.d.ts ++++ b/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.d.ts +@@ -7,6 +7,14 @@ import { DialectAdapter, MigrationLockOptions } from './dialect-adapter.js'; + * they are added and there will be less breaking changes. + */ + export declare abstract class DialectAdapterBase implements DialectAdapter { ++ /** ++ * Whether or not this dialect supports `if not exists` in creation of tables/schemas/views/etc. ++ * ++ * If this is false, Kysely's internal migrations tables and schemas are created ++ * without `if not exists` in migrations. This is not a problem if the dialect ++ * supports transactional DDL. ++ */ ++ get supportsCreateIfNotExists(): boolean; + /** + * Whether or not this dialect supports transactional DDL. + * +diff --git a/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.js b/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.js +index a8a950f..53c47b0 100644 +--- a/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.js ++++ b/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.js +@@ -8,6 +8,9 @@ exports.DialectAdapterBase = void 0; + * they are added and there will be less breaking changes. + */ + class DialectAdapterBase { ++ get supportsCreateIfNotExists() { ++ return true; ++ } + get supportsTransactionalDdl() { + return false; + } +diff --git a/node_modules/kysely/dist/cjs/dialect/dialect-adapter.d.ts b/node_modules/kysely/dist/cjs/dialect/dialect-adapter.d.ts +index 73a925a..73baab0 100644 +--- a/node_modules/kysely/dist/cjs/dialect/dialect-adapter.d.ts ++++ b/node_modules/kysely/dist/cjs/dialect/dialect-adapter.d.ts +@@ -1,4 +1,4 @@ +-import { Kysely } from '../kysely.js'; ++import { Kysely } from 'kysely/dist/cjs/kysely.js'; + /** + * A `DialectAdapter` encapsulates all differences between dialects outside + * of `Driver` and `QueryCompiler`. +@@ -8,6 +8,14 @@ import { Kysely } from '../kysely.js'; + * it. For that there's a `supportsTransactionalDdl` boolean in this interface. + */ + export interface DialectAdapter { ++ /** ++ * Whether or not this dialect supports `if not exists` in creation of tables/schemas/views/etc. ++ * ++ * If this is false, Kysely's internal migrations tables and schemas are created ++ * without `if not exists` in migrations. This is not a problem if the dialect ++ * supports transactional DDL. ++ */ ++ readonly supportsCreateIfNotExists: boolean; + /** + * Whether or not this dialect supports transactional DDL. + * +diff --git a/node_modules/kysely/dist/cjs/dialect/dialect.d.ts b/node_modules/kysely/dist/cjs/dialect/dialect.d.ts +index 58c74f9..a84ed23 100644 +--- a/node_modules/kysely/dist/cjs/dialect/dialect.d.ts ++++ b/node_modules/kysely/dist/cjs/dialect/dialect.d.ts +@@ -1,8 +1,8 @@ +-import { Driver } from '../driver/driver.js'; +-import { Kysely } from '../kysely.js'; +-import { QueryCompiler } from '../query-compiler/query-compiler.js'; +-import { DatabaseIntrospector } from './database-introspector.js'; +-import { DialectAdapter } from './dialect-adapter.js'; ++import { Driver } from 'kysely/dist/cjs/driver/driver.js'; ++import { Kysely } from 'kysely/dist/cjs/kysely.js'; ++import { QueryCompiler } from 'kysely/dist/cjs/query-compiler/query-compiler.js'; ++import { DatabaseIntrospector } from 'kysely/dist/cjs/dialect/database-introspector.js'; ++import { DialectAdapter } from 'kysely/dist/cjs/dialect/dialect-adapter.js'; + /** + * A Dialect is the glue between Kysely and the underlying database engine. + * +diff --git a/node_modules/kysely/dist/cjs/dialect/postgres/postgres-driver.js b/node_modules/kysely/dist/cjs/dialect/postgres/postgres-driver.js +index 4f205f4..a67ea6f 100644 +--- a/node_modules/kysely/dist/cjs/dialect/postgres/postgres-driver.js ++++ b/node_modules/kysely/dist/cjs/dialect/postgres/postgres-driver.js +@@ -28,7 +28,7 @@ class PostgresDriver { + // The driver must take care of calling `onCreateConnection` when a new + // connection is created. The `pg` module doesn't provide an async hook + // for the connection creation. We need to call the method explicitly. +- if (this.#config?.onCreateConnection) { ++ if (this.#config.onCreateConnection) { + await this.#config.onCreateConnection(connection); + } + } +diff --git a/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts b/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +index 69a0a7d..550df53 100644 +--- a/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts ++++ b/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +@@ -1,7 +1,7 @@ + import { Kysely } from '../../kysely.js'; + import { DialectAdapterBase } from '../dialect-adapter-base.js'; + import { MigrationLockOptions } from '../dialect-adapter.js'; +-export declare class SqliteAdapter implements DialectAdapterBase { ++export declare class SqliteAdapter extends DialectAdapterBase { + /** + * Whether or not this dialect supports transactional DDL. + * +diff --git a/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.js b/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.js +index 78850a0..ef9f504 100644 +--- a/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.js ++++ b/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.js +@@ -1,7 +1,8 @@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.SqliteAdapter = void 0; +-class SqliteAdapter { ++const dialect_adapter_base_js_1 = require("../dialect-adapter-base.js"); ++class SqliteAdapter extends dialect_adapter_base_js_1.DialectAdapterBase { + get supportsTransactionalDdl() { + return false; + } +diff --git a/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts b/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +index 810af98..a873682 100644 +--- a/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts ++++ b/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +@@ -37,4 +37,5 @@ export interface SqliteStatement { + changes: number | bigint; + lastInsertRowid: number | bigint; + }; ++ iterate(parameters: ReadonlyArray): IterableIterator; + } +diff --git a/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-driver.js b/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-driver.js +index 13594af..99676cf 100644 +--- a/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-driver.js ++++ b/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-driver.js +@@ -1,6 +1,7 @@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.SqliteDriver = void 0; ++const select_query_node_js_1 = require("../../operation-node/select-query-node.js"); + const compiled_query_js_1 = require("../../query-compiler/compiled-query.js"); + const object_utils_js_1 = require("../../util/object-utils.js"); + class SqliteDriver { +@@ -70,8 +71,20 @@ class SqliteConnection { + }); + } + } +- async *streamQuery() { +- throw new Error("Sqlite driver doesn't support streaming"); ++ async *streamQuery(compiledQuery, _chunkSize) { ++ const { sql, parameters, query } = compiledQuery; ++ const stmt = this.#db.prepare(sql); ++ if (select_query_node_js_1.SelectQueryNode.is(query)) { ++ const iter = stmt.iterate(parameters); ++ for (const row of iter) { ++ yield { ++ rows: [row], ++ }; ++ } ++ } ++ else { ++ throw new Error('Sqlite driver only supports streaming of select queries'); ++ } + } + } + class ConnectionMutex { +diff --git a/node_modules/kysely/dist/cjs/driver/connection-provider.d.ts b/node_modules/kysely/dist/cjs/driver/connection-provider.d.ts +index a75244c..8a5003c 100644 +--- a/node_modules/kysely/dist/cjs/driver/connection-provider.d.ts ++++ b/node_modules/kysely/dist/cjs/driver/connection-provider.d.ts +@@ -1,4 +1,4 @@ +-import { DatabaseConnection } from './database-connection.js'; ++import { DatabaseConnection } from 'kysely/dist/cjs/driver/database-connection.js'; + export interface ConnectionProvider { + /** + * Provides a connection for the callback and takes care of disposing +diff --git a/node_modules/kysely/dist/cjs/driver/database-connection.d.ts b/node_modules/kysely/dist/cjs/driver/database-connection.d.ts +index 8a4766e..2902362 100644 +--- a/node_modules/kysely/dist/cjs/driver/database-connection.d.ts ++++ b/node_modules/kysely/dist/cjs/driver/database-connection.d.ts +@@ -1,4 +1,4 @@ +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; + /** + * A single connection to the database engine. + * +diff --git a/node_modules/kysely/dist/cjs/driver/driver.d.ts b/node_modules/kysely/dist/cjs/driver/driver.d.ts +index 00babcb..5f317f4 100644 +--- a/node_modules/kysely/dist/cjs/driver/driver.d.ts ++++ b/node_modules/kysely/dist/cjs/driver/driver.d.ts +@@ -1,5 +1,5 @@ +-import { ArrayItemType } from '../util/type-utils.js'; +-import { DatabaseConnection } from './database-connection.js'; ++import { ArrayItemType } from 'kysely/dist/cjs/util/type-utils.js'; ++import { DatabaseConnection } from 'kysely/dist/cjs/driver/database-connection.js'; + /** + * A Driver creates and releases {@link DatabaseConnection | database connections} + * and is also responsible for connection pooling (if the dialect supports pooling). +@@ -40,5 +40,5 @@ export interface Driver { + export interface TransactionSettings { + readonly isolationLevel?: IsolationLevel; + } +-export declare const TRANSACTION_ISOLATION_LEVELS: readonly ["read uncommitted", "read committed", "repeatable read", "serializable"]; ++export declare const TRANSACTION_ISOLATION_LEVELS: readonly ["read uncommitted", "read committed", "repeatable read", "serializable", "snapshot"]; + export type IsolationLevel = ArrayItemType; +diff --git a/node_modules/kysely/dist/cjs/driver/driver.js b/node_modules/kysely/dist/cjs/driver/driver.js +index 8acf3ea..80b9c33 100644 +--- a/node_modules/kysely/dist/cjs/driver/driver.js ++++ b/node_modules/kysely/dist/cjs/driver/driver.js +@@ -6,4 +6,5 @@ exports.TRANSACTION_ISOLATION_LEVELS = [ + 'read committed', + 'repeatable read', + 'serializable', ++ 'snapshot', + ]; +diff --git a/node_modules/kysely/dist/cjs/driver/single-connection-provider.js b/node_modules/kysely/dist/cjs/driver/single-connection-provider.js +index cf064c4..db6bca0 100644 +--- a/node_modules/kysely/dist/cjs/driver/single-connection-provider.js ++++ b/node_modules/kysely/dist/cjs/driver/single-connection-provider.js +@@ -1,6 +1,7 @@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.SingleConnectionProvider = void 0; ++const ignoreError = () => { }; + class SingleConnectionProvider { + #connection; + #runningPromise; +@@ -9,17 +10,15 @@ class SingleConnectionProvider { + } + async provideConnection(consumer) { + while (this.#runningPromise) { +- await this.#runningPromise; ++ await this.#runningPromise.catch(ignoreError); + } +- const promise = this.#run(consumer); +- this.#runningPromise = promise +- .then(() => { +- this.#runningPromise = undefined; +- }) +- .catch(() => { ++ // `#runningPromise` must be set to undefined before it's ++ // resolved or rejected. Otherwise the while loop above ++ // will misbehave. ++ this.#runningPromise = this.#run(consumer).finally(() => { + this.#runningPromise = undefined; + }); +- return promise; ++ return this.#runningPromise; + } + // Run the runner in an async function to make sure it doesn't + // throw synchronous errors. +diff --git a/node_modules/kysely/dist/cjs/dynamic/dynamic-reference-builder.d.ts b/node_modules/kysely/dist/cjs/dynamic/dynamic-reference-builder.d.ts +index 650ce82..5c6fec7 100644 +--- a/node_modules/kysely/dist/cjs/dynamic/dynamic-reference-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/dynamic/dynamic-reference-builder.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { SimpleReferenceExpressionNode } from '../operation-node/simple-reference-expression-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { SimpleReferenceExpressionNode } from 'kysely/dist/cjs/operation-node/simple-reference-expression-node.js'; + export declare class DynamicReferenceBuilder implements OperationNodeSource { + #private; + get dynamicReference(): string; +diff --git a/node_modules/kysely/dist/cjs/dynamic/dynamic.d.ts b/node_modules/kysely/dist/cjs/dynamic/dynamic.d.ts +index f32b5ba..da5a1b7 100644 +--- a/node_modules/kysely/dist/cjs/dynamic/dynamic.d.ts ++++ b/node_modules/kysely/dist/cjs/dynamic/dynamic.d.ts +@@ -1,4 +1,4 @@ +-import { DynamicReferenceBuilder } from './dynamic-reference-builder.js'; ++import { DynamicReferenceBuilder } from 'kysely/dist/cjs/dynamic/dynamic-reference-builder.js'; + export declare class DynamicModule { + /** + * Creates a dynamic reference to a column that is not know at compile time. +diff --git a/node_modules/kysely/dist/cjs/expression/expression-builder.d.ts b/node_modules/kysely/dist/cjs/expression/expression-builder.d.ts +index 7b4a340..ba5c3a0 100644 +--- a/node_modules/kysely/dist/cjs/expression/expression-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/expression/expression-builder.d.ts +@@ -1,19 +1,20 @@ +-import { SelectQueryBuilder } from '../query-builder/select-query-builder.js'; +-import { TableExpression, From, FromTables, ExtractTableAlias, AnyAliasedTable, PickTableWithAlias } from '../parser/table-parser.js'; +-import { FunctionModule } from '../query-builder/function-module.js'; +-import { ExtractTypeFromReferenceExpression, ReferenceExpression, SimpleReferenceExpression, StringReference } from '../parser/reference-parser.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { BinaryOperatorExpression, ComparisonOperatorExpression, FilterObject, OperandValueExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js'; +-import { Expression } from './expression.js'; +-import { ExpressionWrapper } from './expression-wrapper.js'; +-import { ComparisonOperator, JSONOperatorWith$, UnaryOperator } from '../operation-node/operator-node.js'; +-import { SqlBool } from '../util/type-utils.js'; +-import { ExtractTypeFromValueExpression } from '../parser/value-parser.js'; +-import { CaseBuilder } from '../query-builder/case-builder.js'; +-import { JSONPathBuilder } from '../query-builder/json-path-builder.js'; +-import { OperandExpression } from '../parser/expression-parser.js'; +-import { CallbackSelection, SelectCallback, SelectExpression, Selection } from '../parser/select-parser.js'; +-import { RefTuple2, RefTuple3, RefTuple4, RefTuple5, ValTuple2, ValTuple3, ValTuple4, ValTuple5 } from '../parser/tuple-parser.js'; ++import { SelectQueryBuilder } from 'kysely/dist/cjs/query-builder/select-query-builder.js'; ++import { TableExpression, From, FromTables, ExtractTableAlias, AnyAliasedTable, PickTableWithAlias } from 'kysely/dist/cjs/parser/table-parser.js'; ++import { FunctionModule } from 'kysely/dist/cjs/query-builder/function-module.js'; ++import { ExtractTypeFromReferenceExpression, ReferenceExpression, SimpleReferenceExpression, StringReference } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { BinaryOperatorExpression, ComparisonOperatorExpression, FilterObject, OperandValueExpression, OperandValueExpressionOrList } from 'kysely/dist/cjs/parser/binary-operation-parser.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { ExpressionWrapper } from 'kysely/dist/cjs/expression/expression-wrapper.js'; ++import { ComparisonOperator, JSONOperatorWith$, UnaryOperator } from 'kysely/dist/cjs/operation-node/operator-node.js'; ++import { SqlBool } from 'kysely/dist/cjs/util/type-utils.js'; ++import { ExtractTypeFromValueExpression } from 'kysely/dist/cjs/parser/value-parser.js'; ++import { CaseBuilder } from 'kysely/dist/cjs/query-builder/case-builder.js'; ++import { JSONPathBuilder } from 'kysely/dist/cjs/query-builder/json-path-builder.js'; ++import { OperandExpression } from 'kysely/dist/cjs/parser/expression-parser.js'; ++import { CallbackSelection, SelectCallback, SelectExpression, Selection } from 'kysely/dist/cjs/parser/select-parser.js'; ++import { RefTuple2, RefTuple3, RefTuple4, RefTuple5, ValTuple2, ValTuple3, ValTuple4, ValTuple5 } from 'kysely/dist/cjs/parser/tuple-parser.js'; ++import { Selectable } from 'kysely/dist/cjs/util/column-type.js'; + export interface ExpressionBuilder { + /** + * Creates a binary expression. +@@ -344,6 +345,30 @@ export interface ExpressionBuilder { + */ + ref>(reference: RE): ExpressionWrapper>; + ref>(reference: RE, op: JSONOperatorWith$): JSONPathBuilder>; ++ /** ++ * Creates a table reference. ++ * ++ * ```ts ++ * db.selectFrom('person') ++ * .innerJoin('pet', 'pet.owner_id', 'person.id') ++ * .select(eb => [ ++ * 'person.id', ++ * sql`jsonb_agg(${eb.table('pet')})`.as('pets') ++ * ]) ++ * .groupBy('person.id') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * select "person"."id", jsonb_agg("pet") as "pets" ++ * from "person" ++ * inner join "pet" on "pet"."owner_id" = "person"."id" ++ * group by "person"."id" ++ * ``` ++ */ ++ table(table: T): ExpressionWrapper>; + /** + * Returns a value expression. + * +diff --git a/node_modules/kysely/dist/cjs/expression/expression-builder.js b/node_modules/kysely/dist/cjs/expression/expression-builder.js +index 172dfab..cdcef14 100644 +--- a/node_modules/kysely/dist/cjs/expression/expression-builder.js ++++ b/node_modules/kysely/dist/cjs/expression/expression-builder.js +@@ -60,8 +60,11 @@ function createExpressionBuilder(executor = noop_query_executor_js_1.NOOP_QUERY_ + } + return new json_path_builder_js_1.JSONPathBuilder((0, reference_parser_js_1.parseJSONReference)(reference, op)); + }, ++ table(table) { ++ return new expression_wrapper_js_1.ExpressionWrapper((0, table_parser_js_1.parseTable)(table)); ++ }, + val(value) { +- return new expression_wrapper_js_1.ExpressionWrapper((0, value_parser_js_1.parseValueExpressionOrList)(value)); ++ return new expression_wrapper_js_1.ExpressionWrapper((0, value_parser_js_1.parseValueExpression)(value)); + }, + refTuple(...values) { + return new expression_wrapper_js_1.ExpressionWrapper(tuple_node_js_1.TupleNode.create(values.map(reference_parser_js_1.parseReferenceExpression))); +diff --git a/node_modules/kysely/dist/cjs/expression/expression-wrapper.d.ts b/node_modules/kysely/dist/cjs/expression/expression-wrapper.d.ts +index 19799fd..d3c7b9f 100644 +--- a/node_modules/kysely/dist/cjs/expression/expression-wrapper.d.ts ++++ b/node_modules/kysely/dist/cjs/expression/expression-wrapper.d.ts +@@ -1,14 +1,14 @@ +-import { AliasNode } from '../operation-node/alias-node.js'; +-import { AndNode } from '../operation-node/and-node.js'; +-import { OperationNode } from '../operation-node/operation-node.js'; +-import { OrNode } from '../operation-node/or-node.js'; +-import { ParensNode } from '../operation-node/parens-node.js'; +-import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js'; +-import { OperandExpression } from '../parser/expression-parser.js'; +-import { ReferenceExpression } from '../parser/reference-parser.js'; +-import { KyselyTypeError } from '../util/type-error.js'; +-import { SqlBool } from '../util/type-utils.js'; +-import { AliasableExpression, AliasedExpression, Expression } from './expression.js'; ++import { AliasNode } from 'kysely/dist/cjs/operation-node/alias-node.js'; ++import { AndNode } from 'kysely/dist/cjs/operation-node/and-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { OrNode } from 'kysely/dist/cjs/operation-node/or-node.js'; ++import { ParensNode } from 'kysely/dist/cjs/operation-node/parens-node.js'; ++import { ComparisonOperatorExpression, OperandValueExpressionOrList } from 'kysely/dist/cjs/parser/binary-operation-parser.js'; ++import { OperandExpression } from 'kysely/dist/cjs/parser/expression-parser.js'; ++import { ReferenceExpression } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { KyselyTypeError } from 'kysely/dist/cjs/util/type-error.js'; ++import { SqlBool } from 'kysely/dist/cjs/util/type-utils.js'; ++import { AliasableExpression, AliasedExpression, Expression } from 'kysely/dist/cjs/expression/expression.js'; + export declare class ExpressionWrapper implements AliasableExpression { + #private; + constructor(node: OperationNode); +diff --git a/node_modules/kysely/dist/cjs/expression/expression.d.ts b/node_modules/kysely/dist/cjs/expression/expression.d.ts +index 336ff2a..426f092 100644 +--- a/node_modules/kysely/dist/cjs/expression/expression.d.ts ++++ b/node_modules/kysely/dist/cjs/expression/expression.d.ts +@@ -1,6 +1,6 @@ +-import { AliasNode } from '../operation-node/alias-node.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { OperationNode } from '../operation-node/operation-node.js'; ++import { AliasNode } from 'kysely/dist/cjs/operation-node/alias-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + /** + * `Expression` represents an arbitrary SQL expression with a type. + * +diff --git a/node_modules/kysely/dist/cjs/helpers/sqlite.d.ts b/node_modules/kysely/dist/cjs/helpers/sqlite.d.ts +index 6d18663..35715c2 100644 +--- a/node_modules/kysely/dist/cjs/helpers/sqlite.d.ts ++++ b/node_modules/kysely/dist/cjs/helpers/sqlite.d.ts +@@ -1,7 +1,7 @@ +-import { Expression } from '../expression/expression.js'; +-import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js'; +-import { RawBuilder } from '../raw-builder/raw-builder.js'; +-import { Simplify } from '../util/type-utils.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { SelectQueryBuilderExpression } from 'kysely/dist/cjs/query-builder/select-query-builder-expression.js'; ++import { RawBuilder } from 'kysely/dist/cjs/raw-builder/raw-builder.js'; ++import { Simplify } from 'kysely/dist/cjs/util/type-utils.js'; + /** + * A SQLite helper for aggregating a subquery into a JSON array. + * +diff --git a/node_modules/kysely/dist/cjs/index.d.ts b/node_modules/kysely/dist/cjs/index.d.ts +index cf166f8..37cf701 100644 +--- a/node_modules/kysely/dist/cjs/index.d.ts ++++ b/node_modules/kysely/dist/cjs/index.d.ts +@@ -72,6 +72,12 @@ export * from './dialect/postgres/postgres-dialect.js'; + export * from './dialect/sqlite/sqlite-query-compiler.js'; + export * from './dialect/sqlite/sqlite-introspector.js'; + export * from './dialect/sqlite/sqlite-adapter.js'; ++export * from './dialect/mssql/mssql-adapter.js'; ++export * from './dialect/mssql/mssql-dialect-config.js'; ++export * from './dialect/mssql/mssql-dialect.js'; ++export * from './dialect/mssql/mssql-driver.js'; ++export * from './dialect/mssql/mssql-introspector.js'; ++export * from './dialect/mssql/mssql-query-compiler.js'; + export * from './query-compiler/default-query-compiler.js'; + export * from './query-compiler/query-compiler.js'; + export * from './migration/migrator.js'; +@@ -176,7 +182,7 @@ export * from './util/compilable.js'; + export * from './util/explainable.js'; + export * from './util/streamable.js'; + export * from './util/log.js'; +-export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, Equals, UnknownRow, Simplify, SqlBool, } from './util/type-utils.js'; ++export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, Equals, UnknownRow, Simplify, SqlBool, Nullable, } from './util/type-utils.js'; + export * from './util/infer-result.js'; + export { logOnce } from './util/log-once.js'; + export { SelectExpression, SelectCallback, SelectArg, Selection, CallbackSelection, } from './parser/select-parser.js'; +diff --git a/node_modules/kysely/dist/cjs/index.js b/node_modules/kysely/dist/cjs/index.js +index a61ec58..714cbda 100644 +--- a/node_modules/kysely/dist/cjs/index.js ++++ b/node_modules/kysely/dist/cjs/index.js +@@ -90,6 +90,12 @@ __exportStar(require("./dialect/postgres/postgres-dialect.js"), exports); + __exportStar(require("./dialect/sqlite/sqlite-query-compiler.js"), exports); + __exportStar(require("./dialect/sqlite/sqlite-introspector.js"), exports); + __exportStar(require("./dialect/sqlite/sqlite-adapter.js"), exports); ++__exportStar(require("./dialect/mssql/mssql-adapter.js"), exports); ++__exportStar(require("./dialect/mssql/mssql-dialect-config.js"), exports); ++__exportStar(require("./dialect/mssql/mssql-dialect.js"), exports); ++__exportStar(require("./dialect/mssql/mssql-driver.js"), exports); ++__exportStar(require("./dialect/mssql/mssql-introspector.js"), exports); ++__exportStar(require("./dialect/mssql/mssql-query-compiler.js"), exports); + __exportStar(require("./query-compiler/default-query-compiler.js"), exports); + __exportStar(require("./query-compiler/query-compiler.js"), exports); + __exportStar(require("./migration/migrator.js"), exports); +diff --git a/node_modules/kysely/dist/cjs/kysely.d.ts b/node_modules/kysely/dist/cjs/kysely.d.ts +index 52e909a..b10152e 100644 +--- a/node_modules/kysely/dist/cjs/kysely.d.ts ++++ b/node_modules/kysely/dist/cjs/kysely.d.ts +@@ -1,21 +1,21 @@ +-import { Dialect } from './dialect/dialect.js'; +-import { SchemaModule } from './schema/schema.js'; +-import { DynamicModule } from './dynamic/dynamic.js'; +-import { QueryExecutor } from './query-executor/query-executor.js'; +-import { QueryCreator } from './query-creator.js'; +-import { KyselyPlugin } from './plugin/kysely-plugin.js'; +-import { DatabaseIntrospector } from './dialect/database-introspector.js'; +-import { Driver, IsolationLevel } from './driver/driver.js'; +-import { FunctionModule } from './query-builder/function-module.js'; +-import { LogConfig } from './util/log.js'; +-import { QueryExecutorProvider } from './query-executor/query-executor-provider.js'; +-import { QueryResult } from './driver/database-connection.js'; +-import { CompiledQuery } from './query-compiler/compiled-query.js'; +-import { QueryId } from './util/query-id.js'; +-import { Compilable } from './util/compilable.js'; +-import { CaseBuilder } from './query-builder/case-builder.js'; +-import { Expression } from './expression/expression.js'; +-import { DrainOuterGeneric } from './util/type-utils.js'; ++import { Dialect } from 'kysely/dist/cjs/dialect/dialect.js'; ++import { SchemaModule } from 'kysely/dist/cjs/schema/schema.js'; ++import { DynamicModule } from 'kysely/dist/cjs/dynamic/dynamic.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { QueryCreator } from 'kysely/dist/cjs/query-creator.js'; ++import { KyselyPlugin } from 'kysely/dist/cjs/plugin/kysely-plugin.js'; ++import { DatabaseIntrospector } from 'kysely/dist/cjs/dialect/database-introspector.js'; ++import { Driver, IsolationLevel } from 'kysely/dist/cjs/driver/driver.js'; ++import { FunctionModule } from 'kysely/dist/cjs/query-builder/function-module.js'; ++import { LogConfig } from 'kysely/dist/cjs/util/log.js'; ++import { QueryExecutorProvider } from 'kysely/dist/cjs/query-executor/query-executor-provider.js'; ++import { QueryResult } from 'kysely/dist/cjs/driver/database-connection.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { CaseBuilder } from 'kysely/dist/cjs/query-builder/case-builder.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { DrainOuterGeneric } from 'kysely/dist/cjs/util/type-utils.js'; + /** + * The main Kysely class. + * +@@ -66,7 +66,7 @@ export declare class Kysely extends QueryCreator implements QueryExecuto + /** + * Returns the {@link SchemaModule} module for building database schema. + */ +- get schema(): SchemaModule; ++ get schema(): SchemaModule; + /** + * Returns a the {@link DynamicModule} module. + * +diff --git a/node_modules/kysely/dist/cjs/migration/migrator.js b/node_modules/kysely/dist/cjs/migration/migrator.js +index 76f2d83..6f1c144 100644 +--- a/node_modules/kysely/dist/cjs/migration/migrator.js ++++ b/node_modules/kysely/dist/cjs/migration/migrator.js +@@ -220,10 +220,7 @@ class Migrator { + } + if (!(await this.#doesSchemaExists())) { + try { +- await this.#props.db.schema +- .createSchema(this.#migrationTableSchema) +- .ifNotExists() +- .execute(); ++ await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema)); + } + catch (error) { + // At least on PostgreSQL, `if not exists` doesn't guarantee the `create schema` +@@ -239,20 +236,15 @@ class Migrator { + if (!(await this.#doesTableExists(this.#migrationTable))) { + try { + if (this.#migrationTableSchema) { +- await this.#props.db.schema +- .createSchema(this.#migrationTableSchema) +- .ifNotExists() +- .execute(); ++ await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema)); + } +- await this.#props.db.schema ++ await this.#createIfNotExists(this.#props.db.schema + .withPlugin(this.#schemaPlugin) + .createTable(this.#migrationTable) +- .ifNotExists() + .addColumn('name', 'varchar(255)', (col) => col.notNull().primaryKey()) + // The migration run time as ISO string. This is not a real date type as we + // can't know which data type is supported by all future dialects. +- .addColumn('timestamp', 'varchar(255)', (col) => col.notNull()) +- .execute(); ++ .addColumn('timestamp', 'varchar(255)', (col) => col.notNull())); + } + catch (error) { + // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table` +@@ -267,13 +259,11 @@ class Migrator { + async #ensureMigrationLockTableExists() { + if (!(await this.#doesTableExists(this.#migrationLockTable))) { + try { +- await this.#props.db.schema ++ await this.#createIfNotExists(this.#props.db.schema + .withPlugin(this.#schemaPlugin) + .createTable(this.#migrationLockTable) +- .ifNotExists() + .addColumn('id', 'varchar(255)', (col) => col.notNull().primaryKey()) +- .addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0)) +- .execute(); ++ .addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0))); + } + catch (error) { + // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table` +@@ -481,6 +471,12 @@ class Migrator { + } + return { results }; + } ++ async #createIfNotExists(qb) { ++ if (this.#props.db.getExecutor().adapter.supportsCreateIfNotExists) { ++ qb = qb.ifNotExists(); ++ } ++ await qb.execute(); ++ } + } + exports.Migrator = Migrator; + class MigrationResultSetError extends Error { +diff --git a/node_modules/kysely/dist/cjs/operation-node/add-column-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/add-column-node.d.ts +index 03b5cff..fd8cd43 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/add-column-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/add-column-node.d.ts +@@ -1,5 +1,5 @@ +-import { ColumnDefinitionNode } from './column-definition-node.js'; +-import { OperationNode } from './operation-node.js'; ++import { ColumnDefinitionNode } from 'kysely/dist/cjs/operation-node/column-definition-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface AddColumnNode extends OperationNode { + readonly kind: 'AddColumnNode'; + readonly column: ColumnDefinitionNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/add-constraint-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/add-constraint-node.d.ts +index a342b5b..aa7c2bd 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/add-constraint-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/add-constraint-node.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNode } from './operation-node.js'; +-import { ConstraintNode } from './constraint-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { ConstraintNode } from 'kysely/dist/cjs/operation-node/constraint-node.js'; + export interface AddConstraintNode extends OperationNode { + readonly kind: 'AddConstraintNode'; + readonly constraint: ConstraintNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/add-index-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/add-index-node.d.ts +new file mode 100644 +index 0000000..5328a2a +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/add-index-node.d.ts +@@ -0,0 +1,21 @@ ++import { IdentifierNode } from 'kysely/dist/cjs/operation-node/identifier-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { RawNode } from 'kysely/dist/cjs/operation-node/raw-node.js'; ++export type AddIndexNodeProps = Omit; ++export interface AddIndexNode extends OperationNode { ++ readonly kind: 'AddIndexNode'; ++ readonly name: IdentifierNode; ++ readonly columns?: OperationNode[]; ++ readonly unique?: boolean; ++ readonly using?: RawNode; ++ readonly ifNotExists?: boolean; ++} ++/** ++ * @internal ++ */ ++export declare const AddIndexNode: Readonly<{ ++ is(node: OperationNode): node is AddIndexNode; ++ create(name: string): AddIndexNode; ++ cloneWith(node: AddIndexNode, props: AddIndexNodeProps): AddIndexNode; ++ cloneWithColumns(node: AddIndexNode, columns: OperationNode[]): AddIndexNode; ++}>; +diff --git a/node_modules/kysely/dist/cjs/operation-node/add-index-node.js b/node_modules/kysely/dist/cjs/operation-node/add-index-node.js +new file mode 100644 +index 0000000..0341e28 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/add-index-node.js +@@ -0,0 +1,31 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.AddIndexNode = void 0; ++const object_utils_js_1 = require("../util/object-utils.js"); ++const identifier_node_js_1 = require("./identifier-node.js"); ++/** ++ * @internal ++ */ ++exports.AddIndexNode = (0, object_utils_js_1.freeze)({ ++ is(node) { ++ return node.kind === 'AddIndexNode'; ++ }, ++ create(name) { ++ return (0, object_utils_js_1.freeze)({ ++ kind: 'AddIndexNode', ++ name: identifier_node_js_1.IdentifierNode.create(name) ++ }); ++ }, ++ cloneWith(node, props) { ++ return (0, object_utils_js_1.freeze)({ ++ ...node, ++ ...props, ++ }); ++ }, ++ cloneWithColumns(node, columns) { ++ return (0, object_utils_js_1.freeze)({ ++ ...node, ++ columns: [...(node.columns || []), ...columns], ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/cjs/operation-node/aggregate-function-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/aggregate-function-node.d.ts +index a2a6857..b85dba9 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/aggregate-function-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/aggregate-function-node.d.ts +@@ -1,6 +1,6 @@ +-import { OperationNode } from './operation-node.js'; +-import { OverNode } from './over-node.js'; +-import { WhereNode } from './where-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { OverNode } from 'kysely/dist/cjs/operation-node/over-node.js'; ++import { WhereNode } from 'kysely/dist/cjs/operation-node/where-node.js'; + export interface AggregateFunctionNode extends OperationNode { + readonly kind: 'AggregateFunctionNode'; + readonly func: string; +diff --git a/node_modules/kysely/dist/cjs/operation-node/alias-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/alias-node.d.ts +index 552c69b..acd28e0 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/alias-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/alias-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface AliasNode extends OperationNode { + readonly kind: 'AliasNode'; + readonly node: OperationNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/alter-column-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/alter-column-node.d.ts +index e888419..07d95d4 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/alter-column-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/alter-column-node.d.ts +@@ -1,6 +1,6 @@ +-import { OperationNode } from './operation-node.js'; +-import { ColumnNode } from './column-node.js'; +-import { RawNode } from './raw-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { ColumnNode } from 'kysely/dist/cjs/operation-node/column-node.js'; ++import { RawNode } from 'kysely/dist/cjs/operation-node/raw-node.js'; + export type AlterColumnNodeProps = Omit; + export interface AlterColumnNode extends OperationNode { + readonly kind: 'AlterColumnNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/alter-table-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/alter-table-node.d.ts +index 5b03535..0f2da61 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/alter-table-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/alter-table-node.d.ts +@@ -1,14 +1,16 @@ +-import { OperationNode } from './operation-node.js'; +-import { AddColumnNode } from './add-column-node.js'; +-import { DropColumnNode } from './drop-column-node.js'; +-import { TableNode } from './table-node.js'; +-import { IdentifierNode } from './identifier-node.js'; +-import { RenameColumnNode } from './rename-column-node.js'; +-import { AlterColumnNode } from './alter-column-node.js'; +-import { AddConstraintNode } from './add-constraint-node.js'; +-import { DropConstraintNode } from './drop-constraint-node.js'; +-import { ModifyColumnNode } from './modify-column-node.js'; +-export type AlterTableNodeTableProps = Pick; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { AddColumnNode } from 'kysely/dist/cjs/operation-node/add-column-node.js'; ++import { DropColumnNode } from 'kysely/dist/cjs/operation-node/drop-column-node.js'; ++import { TableNode } from 'kysely/dist/cjs/operation-node/table-node.js'; ++import { IdentifierNode } from 'kysely/dist/cjs/operation-node/identifier-node.js'; ++import { RenameColumnNode } from 'kysely/dist/cjs/operation-node/rename-column-node.js'; ++import { AlterColumnNode } from 'kysely/dist/cjs/operation-node/alter-column-node.js'; ++import { AddConstraintNode } from 'kysely/dist/cjs/operation-node/add-constraint-node.js'; ++import { DropConstraintNode } from 'kysely/dist/cjs/operation-node/drop-constraint-node.js'; ++import { ModifyColumnNode } from 'kysely/dist/cjs/operation-node/modify-column-node.js'; ++import { DropIndexNode } from 'kysely/dist/cjs/operation-node/drop-index-node.js'; ++import { AddIndexNode } from 'kysely/dist/cjs/operation-node/add-index-node.js'; ++export type AlterTableNodeTableProps = Pick; + export type AlterTableColumnAlterationNode = RenameColumnNode | AddColumnNode | DropColumnNode | AlterColumnNode | ModifyColumnNode; + export interface AlterTableNode extends OperationNode { + readonly kind: 'AlterTableNode'; +@@ -18,6 +20,8 @@ export interface AlterTableNode extends OperationNode { + readonly columnAlterations?: ReadonlyArray; + readonly addConstraint?: AddConstraintNode; + readonly dropConstraint?: DropConstraintNode; ++ readonly addIndex?: AddIndexNode; ++ readonly dropIndex?: DropIndexNode; + } + /** + * @internal +diff --git a/node_modules/kysely/dist/cjs/operation-node/and-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/and-node.d.ts +index ba1ffa4..5e24df8 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/and-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/and-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface AndNode extends OperationNode { + readonly kind: 'AndNode'; + readonly left: OperationNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/binary-operation-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/binary-operation-node.d.ts +index c4adeab..b9087e9 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/binary-operation-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/binary-operation-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface BinaryOperationNode extends OperationNode { + readonly kind: 'BinaryOperationNode'; + readonly leftOperand: OperationNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/case-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/case-node.d.ts +index 9a6dec1..5b55a5d 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/case-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/case-node.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNode } from './operation-node.js'; +-import { WhenNode } from './when-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { WhenNode } from 'kysely/dist/cjs/operation-node/when-node.js'; + export interface CaseNode extends OperationNode { + readonly kind: 'CaseNode'; + readonly value?: OperationNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/check-constraint-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/check-constraint-node.d.ts +index 6e74d7c..24ec7bb 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/check-constraint-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/check-constraint-node.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNode } from './operation-node.js'; +-import { IdentifierNode } from './identifier-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { IdentifierNode } from 'kysely/dist/cjs/operation-node/identifier-node.js'; + export interface CheckConstraintNode extends OperationNode { + readonly kind: 'CheckConstraintNode'; + readonly expression: OperationNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/column-definition-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/column-definition-node.d.ts +index 6442d83..5e84167 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/column-definition-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/column-definition-node.d.ts +@@ -1,9 +1,9 @@ +-import { CheckConstraintNode } from './check-constraint-node.js'; +-import { ColumnNode } from './column-node.js'; +-import { DefaultValueNode } from './default-value-node.js'; +-import { GeneratedNode } from './generated-node.js'; +-import { OperationNode } from './operation-node.js'; +-import { ReferencesNode } from './references-node.js'; ++import { CheckConstraintNode } from 'kysely/dist/cjs/operation-node/check-constraint-node.js'; ++import { ColumnNode } from 'kysely/dist/cjs/operation-node/column-node.js'; ++import { DefaultValueNode } from 'kysely/dist/cjs/operation-node/default-value-node.js'; ++import { GeneratedNode } from 'kysely/dist/cjs/operation-node/generated-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { ReferencesNode } from 'kysely/dist/cjs/operation-node/references-node.js'; + export type ColumnDefinitionNodeProps = Omit, 'kind' | 'dataType'>; + export interface ColumnDefinitionNode extends OperationNode { + readonly kind: 'ColumnDefinitionNode'; +@@ -20,6 +20,7 @@ export interface ColumnDefinitionNode extends OperationNode { + readonly unsigned?: boolean; + readonly frontModifiers?: ReadonlyArray; + readonly endModifiers?: ReadonlyArray; ++ readonly nullsNotDistinct?: boolean; + } + /** + * @internal +diff --git a/node_modules/kysely/dist/cjs/operation-node/column-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/column-node.d.ts +index d07a8b4..9c71e55 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/column-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/column-node.d.ts +@@ -1,5 +1,5 @@ +-import { IdentifierNode } from './identifier-node.js'; +-import { OperationNode } from './operation-node.js'; ++import { IdentifierNode } from 'kysely/dist/cjs/operation-node/identifier-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface ColumnNode extends OperationNode { + readonly kind: 'ColumnNode'; + readonly column: IdentifierNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/column-update-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/column-update-node.d.ts +index 2e8ab34..865997c 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/column-update-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/column-update-node.d.ts +@@ -1,8 +1,7 @@ +-import { ColumnNode } from './column-node.js'; +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface ColumnUpdateNode extends OperationNode { + readonly kind: 'ColumnUpdateNode'; +- readonly column: ColumnNode; ++ readonly column: OperationNode; + readonly value: OperationNode; + } + /** +@@ -10,5 +9,5 @@ export interface ColumnUpdateNode extends OperationNode { + */ + export declare const ColumnUpdateNode: Readonly<{ + is(node: OperationNode): node is ColumnUpdateNode; +- create(column: ColumnNode, value: OperationNode): ColumnUpdateNode; ++ create(column: OperationNode, value: OperationNode): ColumnUpdateNode; + }>; +diff --git a/node_modules/kysely/dist/cjs/operation-node/common-table-expression-name-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/common-table-expression-name-node.d.ts +index fd1fb2f..83d7924 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/common-table-expression-name-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/common-table-expression-name-node.d.ts +@@ -1,6 +1,6 @@ +-import { ColumnNode } from './column-node.js'; +-import { OperationNode } from './operation-node.js'; +-import { TableNode } from './table-node.js'; ++import { ColumnNode } from 'kysely/dist/cjs/operation-node/column-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { TableNode } from 'kysely/dist/cjs/operation-node/table-node.js'; + export interface CommonTableExpressionNameNode extends OperationNode { + readonly kind: 'CommonTableExpressionNameNode'; + readonly table: TableNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/common-table-expression-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/common-table-expression-node.d.ts +index c8a2f8a..34c1780 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/common-table-expression-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/common-table-expression-node.d.ts +@@ -1,5 +1,5 @@ +-import { CommonTableExpressionNameNode } from './common-table-expression-name-node.js'; +-import { OperationNode } from './operation-node.js'; ++import { CommonTableExpressionNameNode } from 'kysely/dist/cjs/operation-node/common-table-expression-name-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + type CommonTableExpressionNodeProps = Pick; + export interface CommonTableExpressionNode extends OperationNode { + readonly kind: 'CommonTableExpressionNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/constraint-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/constraint-node.d.ts +index ef3548e..6da12df 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/constraint-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/constraint-node.d.ts +@@ -1,5 +1,5 @@ +-import { CheckConstraintNode } from './check-constraint-node.js'; +-import { ForeignKeyConstraintNode } from './foreign-key-constraint-node.js'; +-import { PrimaryKeyConstraintNode } from './primary-constraint-node.js'; +-import { UniqueConstraintNode } from './unique-constraint-node.js'; ++import { CheckConstraintNode } from 'kysely/dist/cjs/operation-node/check-constraint-node.js'; ++import { ForeignKeyConstraintNode } from 'kysely/dist/cjs/operation-node/foreign-key-constraint-node.js'; ++import { PrimaryKeyConstraintNode } from 'kysely/dist/cjs/operation-node/primary-constraint-node.js'; ++import { UniqueConstraintNode } from 'kysely/dist/cjs/operation-node/unique-constraint-node.js'; + export type ConstraintNode = PrimaryKeyConstraintNode | UniqueConstraintNode | CheckConstraintNode | ForeignKeyConstraintNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/create-index-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/create-index-node.d.ts +index a3a99d1..a18aa4a 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/create-index-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/create-index-node.d.ts +@@ -1,8 +1,8 @@ +-import { IdentifierNode } from './identifier-node.js'; +-import { OperationNode } from './operation-node.js'; +-import { RawNode } from './raw-node.js'; +-import { TableNode } from './table-node.js'; +-import { WhereNode } from './where-node.js'; ++import { IdentifierNode } from 'kysely/dist/cjs/operation-node/identifier-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { RawNode } from 'kysely/dist/cjs/operation-node/raw-node.js'; ++import { TableNode } from 'kysely/dist/cjs/operation-node/table-node.js'; ++import { WhereNode } from 'kysely/dist/cjs/operation-node/where-node.js'; + export type CreateIndexNodeProps = Omit; + export type IndexType = 'btree' | 'hash' | 'gist' | 'gin'; + export interface CreateIndexNode extends OperationNode { +@@ -14,6 +14,7 @@ export interface CreateIndexNode extends OperationNode { + readonly using?: RawNode; + readonly ifNotExists?: boolean; + readonly where?: WhereNode; ++ readonly nullsNotDistinct?: boolean; + } + /** + * @internal +diff --git a/node_modules/kysely/dist/cjs/operation-node/create-schema-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/create-schema-node.d.ts +index bb609f3..6a4fa7a 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/create-schema-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/create-schema-node.d.ts +@@ -1,5 +1,5 @@ +-import { IdentifierNode } from './identifier-node.js'; +-import { OperationNode } from './operation-node.js'; ++import { IdentifierNode } from 'kysely/dist/cjs/operation-node/identifier-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export type CreateSchemaNodeParams = Omit, 'kind' | 'schema'>; + export interface CreateSchemaNode extends OperationNode { + readonly kind: 'CreateSchemaNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/create-table-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/create-table-node.d.ts +index cc8ceda..988b651 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/create-table-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/create-table-node.d.ts +@@ -1,8 +1,8 @@ +-import { OperationNode } from './operation-node.js'; +-import { TableNode } from './table-node.js'; +-import { ConstraintNode } from './constraint-node.js'; +-import { ColumnDefinitionNode } from './column-definition-node.js'; +-import { ArrayItemType } from '../util/type-utils.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { TableNode } from 'kysely/dist/cjs/operation-node/table-node.js'; ++import { ConstraintNode } from 'kysely/dist/cjs/operation-node/constraint-node.js'; ++import { ColumnDefinitionNode } from 'kysely/dist/cjs/operation-node/column-definition-node.js'; ++import { ArrayItemType } from 'kysely/dist/cjs/util/type-utils.js'; + export declare const ON_COMMIT_ACTIONS: string[]; + export type OnCommitAction = ArrayItemType; + export type CreateTableNodeParams = Omit; +@@ -16,6 +16,7 @@ export interface CreateTableNode extends OperationNode { + readonly onCommit?: OnCommitAction; + readonly frontModifiers?: ReadonlyArray; + readonly endModifiers?: ReadonlyArray; ++ readonly selectQuery?: OperationNode; + } + /** + * @internal +diff --git a/node_modules/kysely/dist/cjs/operation-node/create-trigger-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/create-trigger-node.d.ts +new file mode 100644 +index 0000000..2eb8ae8 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/create-trigger-node.d.ts +@@ -0,0 +1,34 @@ ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { TableNode } from 'kysely/dist/cjs/operation-node/table-node.js'; ++import { IdentifierNode } from 'kysely/dist/cjs/operation-node/identifier-node.js'; ++import { QueryNode } from 'kysely/dist/cjs/operation-node/query-node.js'; ++import { TriggerEventNode } from 'kysely/dist/cjs/operation-node/trigger-event-node.js'; ++import { TriggerOrderNode } from 'kysely/dist/cjs/operation-node/trigger-order-node.js'; ++import { FunctionNode } from 'kysely/dist/cjs/operation-node/function-node.js'; ++export type TriggerTime = 'after' | 'before' | 'instead of'; ++export type CreateTriggerNodeParams = Omit; ++export interface CreateTriggerNode extends OperationNode { ++ readonly kind: 'CreateTriggerNode'; ++ readonly name: IdentifierNode; ++ readonly queries?: ReadonlyArray; ++ readonly function?: FunctionNode; ++ readonly time?: TriggerTime; ++ readonly events?: ReadonlyArray; ++ readonly table?: TableNode; ++ readonly orReplace?: boolean; ++ readonly ifNotExists?: boolean; ++ readonly when?: OperationNode; ++ readonly temporary?: boolean; ++ readonly forEach?: 'row' | 'statement'; ++ readonly order?: TriggerOrderNode; ++} ++/** ++ * @internal ++ */ ++export declare const CreateTriggerNode: Readonly<{ ++ is(node: OperationNode): node is CreateTriggerNode; ++ create(name: IdentifierNode): CreateTriggerNode; ++ cloneWithQuery(createTrigger: CreateTriggerNode, query: QueryNode): CreateTriggerNode; ++ cloneWithEvent(createTrigger: CreateTriggerNode, event: TriggerEventNode): CreateTriggerNode; ++ cloneWith(createTrigger: CreateTriggerNode, params: CreateTriggerNodeParams): CreateTriggerNode; ++}>; +diff --git a/node_modules/kysely/dist/cjs/operation-node/create-trigger-node.js b/node_modules/kysely/dist/cjs/operation-node/create-trigger-node.js +new file mode 100644 +index 0000000..47ba119 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/create-trigger-node.js +@@ -0,0 +1,36 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.CreateTriggerNode = void 0; ++const object_utils_js_1 = require("../util/object-utils.js"); ++/** ++ * @internal ++ */ ++exports.CreateTriggerNode = (0, object_utils_js_1.freeze)({ ++ is(node) { ++ return node.kind === 'CreateTriggerNode'; ++ }, ++ create(name) { ++ return (0, object_utils_js_1.freeze)({ ++ kind: 'CreateTriggerNode', ++ name, ++ }); ++ }, ++ cloneWithQuery(createTrigger, query) { ++ return (0, object_utils_js_1.freeze)({ ++ ...createTrigger, ++ queries: (0, object_utils_js_1.freeze)([...(createTrigger.queries || []), query]), ++ }); ++ }, ++ cloneWithEvent(createTrigger, event) { ++ return (0, object_utils_js_1.freeze)({ ++ ...createTrigger, ++ events: (0, object_utils_js_1.freeze)([...(createTrigger.events || []), event]), ++ }); ++ }, ++ cloneWith(createTrigger, params) { ++ return (0, object_utils_js_1.freeze)({ ++ ...createTrigger, ++ ...params, ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/cjs/operation-node/create-type-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/create-type-node.d.ts +index 3ab9c3b..382285f 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/create-type-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/create-type-node.d.ts +@@ -1,6 +1,6 @@ +-import { OperationNode } from './operation-node.js'; +-import { SchemableIdentifierNode } from './schemable-identifier-node.js'; +-import { ValueListNode } from './value-list-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { SchemableIdentifierNode } from 'kysely/dist/cjs/operation-node/schemable-identifier-node.js'; ++import { ValueListNode } from 'kysely/dist/cjs/operation-node/value-list-node.js'; + export type CreateTypeNodeParams = Omit, 'kind'>; + export interface CreateTypeNode extends OperationNode { + readonly kind: 'CreateTypeNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/create-view-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/create-view-node.d.ts +index 9aa1faa..8db7a40 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/create-view-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/create-view-node.d.ts +@@ -1,8 +1,8 @@ +-import { ColumnNode } from './column-node.js'; +-import { OperationNode } from './operation-node.js'; +-import { RawNode } from './raw-node.js'; +-import { SchemableIdentifierNode } from './schemable-identifier-node.js'; +-import { SelectQueryNode } from './select-query-node.js'; ++import { ColumnNode } from 'kysely/dist/cjs/operation-node/column-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { RawNode } from 'kysely/dist/cjs/operation-node/raw-node.js'; ++import { SchemableIdentifierNode } from 'kysely/dist/cjs/operation-node/schemable-identifier-node.js'; ++import { SelectQueryNode } from 'kysely/dist/cjs/operation-node/select-query-node.js'; + export type CreateViewNodeParams = Omit, 'kind' | 'name'>; + export interface CreateViewNode extends OperationNode { + readonly kind: 'CreateViewNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/data-type-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/data-type-node.d.ts +index 1ab9f33..83557e4 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/data-type-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/data-type-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export type ColumnDataType = 'varchar' | `varchar(${number})` | 'char' | `char(${number})` | 'text' | 'integer' | 'int2' | 'int4' | 'int8' | 'bigint' | 'boolean' | 'real' | 'double precision' | 'float4' | 'float8' | 'decimal' | `decimal(${number}, ${number})` | 'numeric' | `numeric(${number}, ${number})` | 'binary' | `binary(${number})` | 'bytea' | 'date' | 'datetime' | `datetime(${number})` | 'time' | `time(${number})` | 'timetz' | `timetz(${number})` | 'timestamp' | `timestamp(${number})` | 'timestamptz' | `timestamptz(${number})` | 'serial' | 'bigserial' | 'uuid' | 'json' | 'jsonb' | 'blob'; + export type DataTypeParams = Omit; + export interface DataTypeNode extends OperationNode { +diff --git a/node_modules/kysely/dist/cjs/operation-node/default-value-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/default-value-node.d.ts +index 2df8841..0884b9c 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/default-value-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/default-value-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface DefaultValueNode extends OperationNode { + readonly kind: 'DefaultValueNode'; + readonly defaultValue: OperationNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/delete-query-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/delete-query-node.d.ts +index 10d7f15..a993d3f 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/delete-query-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/delete-query-node.d.ts +@@ -1,14 +1,14 @@ +-import { FromNode } from './from-node.js'; +-import { JoinNode } from './join-node.js'; +-import { OperationNode } from './operation-node.js'; +-import { ReturningNode } from './returning-node.js'; +-import { WhereNode } from './where-node.js'; +-import { WithNode } from './with-node.js'; +-import { LimitNode } from './limit-node.js'; +-import { OrderByNode } from './order-by-node.js'; +-import { OrderByItemNode } from './order-by-item-node.js'; +-import { ExplainNode } from './explain-node.js'; +-import { UsingNode } from './using-node.js'; ++import { FromNode } from 'kysely/dist/cjs/operation-node/from-node.js'; ++import { JoinNode } from 'kysely/dist/cjs/operation-node/join-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { ReturningNode } from 'kysely/dist/cjs/operation-node/returning-node.js'; ++import { WhereNode } from 'kysely/dist/cjs/operation-node/where-node.js'; ++import { WithNode } from 'kysely/dist/cjs/operation-node/with-node.js'; ++import { LimitNode } from 'kysely/dist/cjs/operation-node/limit-node.js'; ++import { OrderByNode } from 'kysely/dist/cjs/operation-node/order-by-node.js'; ++import { OrderByItemNode } from 'kysely/dist/cjs/operation-node/order-by-item-node.js'; ++import { ExplainNode } from 'kysely/dist/cjs/operation-node/explain-node.js'; ++import { UsingNode } from 'kysely/dist/cjs/operation-node/using-node.js'; + export interface DeleteQueryNode extends OperationNode { + readonly kind: 'DeleteQueryNode'; + readonly from: FromNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/drop-column-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/drop-column-node.d.ts +index 10e13a2..83fb6d7 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/drop-column-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/drop-column-node.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNode } from './operation-node.js'; +-import { ColumnNode } from './column-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { ColumnNode } from 'kysely/dist/cjs/operation-node/column-node.js'; + export interface DropColumnNode extends OperationNode { + readonly kind: 'DropColumnNode'; + readonly column: ColumnNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/drop-constraint-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/drop-constraint-node.d.ts +index f5ccb05..f7f7660 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/drop-constraint-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/drop-constraint-node.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNode } from './operation-node.js'; +-import { IdentifierNode } from './identifier-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { IdentifierNode } from 'kysely/dist/cjs/operation-node/identifier-node.js'; + export type DropConstraintNodeProps = Omit; + export interface DropConstraintNode extends OperationNode { + readonly kind: 'DropConstraintNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/drop-index-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/drop-index-node.d.ts +index 2cc565e..8159449 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/drop-index-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/drop-index-node.d.ts +@@ -1,6 +1,6 @@ +-import { OperationNode } from './operation-node.js'; +-import { SchemableIdentifierNode } from './schemable-identifier-node.js'; +-import { TableNode } from './table-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { SchemableIdentifierNode } from 'kysely/dist/cjs/operation-node/schemable-identifier-node.js'; ++import { TableNode } from 'kysely/dist/cjs/operation-node/table-node.js'; + export type DropIndexNodeProps = Omit; + export interface DropIndexNode extends OperationNode { + readonly kind: 'DropIndexNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/drop-schema-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/drop-schema-node.d.ts +index 98166ad..34147fc 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/drop-schema-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/drop-schema-node.d.ts +@@ -1,5 +1,5 @@ +-import { IdentifierNode } from './identifier-node.js'; +-import { OperationNode } from './operation-node.js'; ++import { IdentifierNode } from 'kysely/dist/cjs/operation-node/identifier-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export type DropSchemaNodeParams = Omit, 'kind' | 'schema'>; + export interface DropSchemaNode extends OperationNode { + readonly kind: 'DropSchemaNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/drop-table-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/drop-table-node.d.ts +index ab35e3e..ae42660 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/drop-table-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/drop-table-node.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNode } from './operation-node.js'; +-import { TableNode } from './table-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { TableNode } from 'kysely/dist/cjs/operation-node/table-node.js'; + export type DropTablexNodeParams = Omit, 'kind' | 'table'>; + export interface DropTableNode extends OperationNode { + readonly kind: 'DropTableNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/drop-trigger-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/drop-trigger-node.d.ts +new file mode 100644 +index 0000000..e391cf9 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/drop-trigger-node.d.ts +@@ -0,0 +1,17 @@ ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { SchemableIdentifierNode } from 'kysely/dist/cjs/operation-node/schemable-identifier-node.js'; ++export type DropTriggerNodeParams = Omit, 'kind' | 'name'>; ++export interface DropTriggerNode extends OperationNode { ++ readonly kind: 'DropTriggerNode'; ++ readonly name: SchemableIdentifierNode; ++ readonly ifExists?: boolean; ++ readonly cascade?: boolean; ++} ++/** ++ * @internal ++ */ ++export declare const DropTriggerNode: Readonly<{ ++ is(node: OperationNode): node is DropTriggerNode; ++ create(name: SchemableIdentifierNode): DropTriggerNode; ++ cloneWith(dropTrigger: DropTriggerNode, params: DropTriggerNodeParams): DropTriggerNode; ++}>; +diff --git a/node_modules/kysely/dist/cjs/operation-node/drop-trigger-node.js b/node_modules/kysely/dist/cjs/operation-node/drop-trigger-node.js +new file mode 100644 +index 0000000..2bb067e +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/drop-trigger-node.js +@@ -0,0 +1,24 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.DropTriggerNode = void 0; ++const object_utils_js_1 = require("../util/object-utils.js"); ++/** ++ * @internal ++ */ ++exports.DropTriggerNode = (0, object_utils_js_1.freeze)({ ++ is(node) { ++ return node.kind === 'DropTriggerNode'; ++ }, ++ create(name) { ++ return (0, object_utils_js_1.freeze)({ ++ kind: 'DropTriggerNode', ++ name, ++ }); ++ }, ++ cloneWith(dropTrigger, params) { ++ return (0, object_utils_js_1.freeze)({ ++ ...dropTrigger, ++ ...params, ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/cjs/operation-node/drop-type-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/drop-type-node.d.ts +index 9693550..b162606 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/drop-type-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/drop-type-node.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNode } from './operation-node.js'; +-import { SchemableIdentifierNode } from './schemable-identifier-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { SchemableIdentifierNode } from 'kysely/dist/cjs/operation-node/schemable-identifier-node.js'; + export type DropTypeNodeParams = Omit, 'kind' | 'name'>; + export interface DropTypeNode extends OperationNode { + readonly kind: 'DropTypeNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/drop-view-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/drop-view-node.d.ts +index 2c4bf89..316775d 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/drop-view-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/drop-view-node.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNode } from './operation-node.js'; +-import { SchemableIdentifierNode } from './schemable-identifier-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { SchemableIdentifierNode } from 'kysely/dist/cjs/operation-node/schemable-identifier-node.js'; + export type DropViewNodeParams = Omit, 'kind' | 'name'>; + export interface DropViewNode extends OperationNode { + readonly kind: 'DropViewNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/explain-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/explain-node.d.ts +index 8cf89b5..ddd4cd0 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/explain-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/explain-node.d.ts +@@ -1,5 +1,5 @@ +-import { ExplainFormat } from '../util/explainable.js'; +-import { OperationNode } from './operation-node.js'; ++import { ExplainFormat } from 'kysely/dist/cjs/util/explainable.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface ExplainNode extends OperationNode { + readonly kind: 'ExplainNode'; + readonly format?: ExplainFormat; +diff --git a/node_modules/kysely/dist/cjs/operation-node/foreign-key-constraint-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +index c7fe574..408bd48 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/foreign-key-constraint-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +@@ -1,8 +1,8 @@ +-import { ColumnNode } from './column-node.js'; +-import { IdentifierNode } from './identifier-node.js'; +-import { OperationNode } from './operation-node.js'; +-import { OnModifyForeignAction, ReferencesNode } from './references-node.js'; +-import { TableNode } from './table-node.js'; ++import { ColumnNode } from 'kysely/dist/cjs/operation-node/column-node.js'; ++import { IdentifierNode } from 'kysely/dist/cjs/operation-node/identifier-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { OnModifyForeignAction, ReferencesNode } from 'kysely/dist/cjs/operation-node/references-node.js'; ++import { TableNode } from 'kysely/dist/cjs/operation-node/table-node.js'; + export type ForeignKeyConstraintNodeProps = Omit; + export interface ForeignKeyConstraintNode extends OperationNode { + readonly kind: 'ForeignKeyConstraintNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/from-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/from-node.d.ts +index 2c46520..3d63e3b 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/from-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/from-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface FromNode extends OperationNode { + readonly kind: 'FromNode'; + readonly froms: ReadonlyArray; +diff --git a/node_modules/kysely/dist/cjs/operation-node/function-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/function-node.d.ts +index 49aab00..05a1632 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/function-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/function-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface FunctionNode extends OperationNode { + readonly kind: 'FunctionNode'; + readonly func: string; +diff --git a/node_modules/kysely/dist/cjs/operation-node/generated-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/generated-node.d.ts +index 5c86a9f..9a4c356 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/generated-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/generated-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export type GeneratedNodeParams = Omit; + export interface GeneratedNode extends OperationNode { + readonly kind: 'GeneratedNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/group-by-item-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/group-by-item-node.d.ts +index 475ce87..5aeb92c 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/group-by-item-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/group-by-item-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface GroupByItemNode extends OperationNode { + readonly kind: 'GroupByItemNode'; + readonly groupBy: OperationNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/group-by-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/group-by-node.d.ts +index 9b0b108..c8e9315 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/group-by-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/group-by-node.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNode } from './operation-node.js'; +-import { GroupByItemNode } from './group-by-item-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { GroupByItemNode } from 'kysely/dist/cjs/operation-node/group-by-item-node.js'; + export interface GroupByNode extends OperationNode { + readonly kind: 'GroupByNode'; + readonly items: ReadonlyArray; +diff --git a/node_modules/kysely/dist/cjs/operation-node/having-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/having-node.d.ts +index 14830a3..fe2c59e 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/having-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/having-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface HavingNode extends OperationNode { + readonly kind: 'HavingNode'; + readonly having: OperationNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/identifier-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/identifier-node.d.ts +index f74014d..2ee967e 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/identifier-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/identifier-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface IdentifierNode extends OperationNode { + readonly kind: 'IdentifierNode'; + readonly name: string; +diff --git a/node_modules/kysely/dist/cjs/operation-node/insert-query-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/insert-query-node.d.ts +index f28ce2c..56406a5 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/insert-query-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/insert-query-node.d.ts +@@ -1,11 +1,11 @@ +-import { ColumnNode } from './column-node.js'; +-import { ExplainNode } from './explain-node.js'; +-import { OnConflictNode } from './on-conflict-node.js'; +-import { OnDuplicateKeyNode } from './on-duplicate-key-node.js'; +-import { OperationNode } from './operation-node.js'; +-import { ReturningNode } from './returning-node.js'; +-import { TableNode } from './table-node.js'; +-import { WithNode } from './with-node.js'; ++import { ColumnNode } from 'kysely/dist/cjs/operation-node/column-node.js'; ++import { ExplainNode } from 'kysely/dist/cjs/operation-node/explain-node.js'; ++import { OnConflictNode } from 'kysely/dist/cjs/operation-node/on-conflict-node.js'; ++import { OnDuplicateKeyNode } from 'kysely/dist/cjs/operation-node/on-duplicate-key-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { ReturningNode } from 'kysely/dist/cjs/operation-node/returning-node.js'; ++import { TableNode } from 'kysely/dist/cjs/operation-node/table-node.js'; ++import { WithNode } from 'kysely/dist/cjs/operation-node/with-node.js'; + export type InsertQueryNodeProps = Omit; + export interface InsertQueryNode extends OperationNode { + readonly kind: 'InsertQueryNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/join-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/join-node.d.ts +index ceb98ea..f95944b 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/join-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/join-node.d.ts +@@ -1,5 +1,5 @@ +-import { OnNode } from './on-node.js'; +-import { OperationNode } from './operation-node.js'; ++import { OnNode } from 'kysely/dist/cjs/operation-node/on-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export type JoinType = 'InnerJoin' | 'LeftJoin' | 'RightJoin' | 'FullJoin' | 'LateralInnerJoin' | 'LateralLeftJoin'; + export interface JoinNode extends OperationNode { + readonly kind: 'JoinNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/json-operator-chain-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/json-operator-chain-node.d.ts +index 87cacdf..2dbbb66 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/json-operator-chain-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/json-operator-chain-node.d.ts +@@ -1,6 +1,6 @@ +-import { OperationNode } from './operation-node.js'; +-import { OperatorNode } from './operator-node.js'; +-import { ValueNode } from './value-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { OperatorNode } from 'kysely/dist/cjs/operation-node/operator-node.js'; ++import { ValueNode } from 'kysely/dist/cjs/operation-node/value-node.js'; + export interface JSONOperatorChainNode extends OperationNode { + readonly kind: 'JSONOperatorChainNode'; + readonly operator: OperatorNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/json-path-leg-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/json-path-leg-node.d.ts +index f0b498b..8b25b88 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/json-path-leg-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/json-path-leg-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export type JSONPathLegType = 'Member' | 'ArrayLocation'; + export interface JSONPathLegNode extends OperationNode { + readonly kind: 'JSONPathLegNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/json-path-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/json-path-node.d.ts +index 91243ed..93c8ccf 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/json-path-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/json-path-node.d.ts +@@ -1,6 +1,6 @@ +-import { JSONPathLegNode } from './json-path-leg-node.js'; +-import { OperationNode } from './operation-node.js'; +-import { OperatorNode } from './operator-node.js'; ++import { JSONPathLegNode } from 'kysely/dist/cjs/operation-node/json-path-leg-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { OperatorNode } from 'kysely/dist/cjs/operation-node/operator-node.js'; + export interface JSONPathNode extends OperationNode { + readonly kind: 'JSONPathNode'; + readonly inOperator?: OperatorNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/json-reference-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/json-reference-node.d.ts +index 9ba1b27..e225b19 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/json-reference-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/json-reference-node.d.ts +@@ -1,7 +1,7 @@ +-import { JSONOperatorChainNode } from './json-operator-chain-node.js'; +-import { JSONPathNode } from './json-path-node.js'; +-import { OperationNode } from './operation-node.js'; +-import { ReferenceNode } from './reference-node.js'; ++import { JSONOperatorChainNode } from 'kysely/dist/cjs/operation-node/json-operator-chain-node.js'; ++import { JSONPathNode } from 'kysely/dist/cjs/operation-node/json-path-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { ReferenceNode } from 'kysely/dist/cjs/operation-node/reference-node.js'; + export interface JSONReferenceNode extends OperationNode { + readonly kind: 'JSONReferenceNode'; + readonly reference: ReferenceNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/limit-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/limit-node.d.ts +index 3c3de76..25d3c5a 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/limit-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/limit-node.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNode } from './operation-node.js'; +-import { ValueNode } from './value-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { ValueNode } from 'kysely/dist/cjs/operation-node/value-node.js'; + export interface LimitNode extends OperationNode { + readonly kind: 'LimitNode'; + readonly limit: ValueNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/modify-column-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/modify-column-node.d.ts +index e25d4cf..c414d3a 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/modify-column-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/modify-column-node.d.ts +@@ -1,5 +1,5 @@ +-import { ColumnDefinitionNode } from './column-definition-node.js'; +-import { OperationNode } from './operation-node.js'; ++import { ColumnDefinitionNode } from 'kysely/dist/cjs/operation-node/column-definition-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface ModifyColumnNode extends OperationNode { + readonly kind: 'ModifyColumnNode'; + readonly column: ColumnDefinitionNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/offset-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/offset-node.d.ts +index 03158b0..daa5e72 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/offset-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/offset-node.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNode } from './operation-node.js'; +-import { ValueNode } from './value-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { ValueNode } from 'kysely/dist/cjs/operation-node/value-node.js'; + export interface OffsetNode extends OperationNode { + readonly kind: 'OffsetNode'; + readonly offset: ValueNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/on-conflict-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/on-conflict-node.d.ts +index bbd7b2c..71072c8 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/on-conflict-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/on-conflict-node.d.ts +@@ -1,8 +1,8 @@ +-import { ColumnNode } from './column-node.js'; +-import { ColumnUpdateNode } from './column-update-node.js'; +-import { IdentifierNode } from './identifier-node.js'; +-import { OperationNode } from './operation-node.js'; +-import { WhereNode } from './where-node.js'; ++import { ColumnNode } from 'kysely/dist/cjs/operation-node/column-node.js'; ++import { ColumnUpdateNode } from 'kysely/dist/cjs/operation-node/column-update-node.js'; ++import { IdentifierNode } from 'kysely/dist/cjs/operation-node/identifier-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { WhereNode } from 'kysely/dist/cjs/operation-node/where-node.js'; + export type OnConflictNodeProps = Omit; + export interface OnConflictNode extends OperationNode { + readonly kind: 'OnConflictNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/on-duplicate-key-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/on-duplicate-key-node.d.ts +index 63aa5b8..e2a6bdc 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/on-duplicate-key-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/on-duplicate-key-node.d.ts +@@ -1,5 +1,5 @@ +-import { ColumnUpdateNode } from './column-update-node.js'; +-import { OperationNode } from './operation-node.js'; ++import { ColumnUpdateNode } from 'kysely/dist/cjs/operation-node/column-update-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export type OnDuplicateKeyNodeProps = Omit; + export interface OnDuplicateKeyNode extends OperationNode { + readonly kind: 'OnDuplicateKeyNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/on-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/on-node.d.ts +index 97f6383..f2508e3 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/on-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/on-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface OnNode extends OperationNode { + readonly kind: 'OnNode'; + readonly on: OperationNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/operation-node-source.d.ts b/node_modules/kysely/dist/cjs/operation-node/operation-node-source.d.ts +index 6dc3661..24698c3 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/operation-node-source.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/operation-node-source.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface OperationNodeSource { + toOperationNode(): OperationNode; + } +diff --git a/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.d.ts b/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.d.ts +index 6b3a13c..5d7fd9d 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.d.ts +@@ -85,6 +85,11 @@ import { JSONPathNode } from './json-path-node.js'; + import { JSONPathLegNode } from './json-path-leg-node.js'; + import { JSONOperatorChainNode } from './json-operator-chain-node.js'; + import { TupleNode } from './tuple-node.js'; ++import { AddIndexNode } from './add-index-node.js'; ++import { CreateTriggerNode } from './create-trigger-node.js'; ++import { DropTriggerNode } from './drop-trigger-node.js'; ++import { TriggerEventNode } from './trigger-event-node.js'; ++import { TriggerOrderNode } from './trigger-order-node.js'; + /** + * Transforms an operation node tree into another one. + * +@@ -139,9 +144,13 @@ export declare class OperationNodeTransformer { + protected transformDeleteQuery(node: DeleteQueryNode): DeleteQueryNode; + protected transformReturning(node: ReturningNode): ReturningNode; + protected transformCreateTable(node: CreateTableNode): CreateTableNode; ++ protected transformCreateTrigger(node: CreateTriggerNode): CreateTriggerNode; ++ protected transformTriggerEvent(node: TriggerEventNode): TriggerEventNode; ++ protected transformTriggerOrder(node: TriggerOrderNode): TriggerOrderNode; + protected transformColumnDefinition(node: ColumnDefinitionNode): ColumnDefinitionNode; + protected transformAddColumn(node: AddColumnNode): AddColumnNode; + protected transformDropTable(node: DropTableNode): DropTableNode; ++ protected transformDropTrigger(node: DropTriggerNode): DropTriggerNode; + protected transformOrderBy(node: OrderByNode): OrderByNode; + protected transformOrderByItem(node: OrderByItemNode): OrderByItemNode; + protected transformGroupBy(node: GroupByNode): GroupByNode; +@@ -199,6 +208,7 @@ export declare class OperationNodeTransformer { + protected transformJSONPathLeg(node: JSONPathLegNode): JSONPathLegNode; + protected transformJSONOperatorChain(node: JSONOperatorChainNode): JSONOperatorChainNode; + protected transformTuple(node: TupleNode): TupleNode; ++ protected transformAddIndex(node: AddIndexNode): AddIndexNode; + protected transformDataType(node: DataTypeNode): DataTypeNode; + protected transformSelectAll(node: SelectAllNode): SelectAllNode; + protected transformIdentifier(node: IdentifierNode): IdentifierNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.js b/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.js +index bc3d0a4..839914f 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.js ++++ b/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.js +@@ -121,6 +121,11 @@ class OperationNodeTransformer { + JSONPathLegNode: this.transformJSONPathLeg.bind(this), + JSONOperatorChainNode: this.transformJSONOperatorChain.bind(this), + TupleNode: this.transformTuple.bind(this), ++ AddIndexNode: this.transformAddIndex.bind(this), ++ CreateTriggerNode: this.transformCreateTrigger.bind(this), ++ TriggerEventNode: this.transformTriggerEvent.bind(this), ++ TriggerOrderNode: this.transformTriggerOrder.bind(this), ++ DropTriggerNode: this.transformDropTrigger.bind(this), + }); + transformNode(node) { + if (!node) { +@@ -297,6 +302,38 @@ class OperationNodeTransformer { + onCommit: node.onCommit, + frontModifiers: this.transformNodeList(node.frontModifiers), + endModifiers: this.transformNodeList(node.endModifiers), ++ selectQuery: this.transformNode(node.selectQuery), ++ }); ++ } ++ transformCreateTrigger(node) { ++ return (0, require_all_props_js_1.requireAllProps)({ ++ kind: 'CreateTriggerNode', ++ name: this.transformNode(node.name), ++ table: this.transformNode(node.table), ++ ifNotExists: node.ifNotExists, ++ time: node.time, ++ events: this.transformNodeList(node.events), ++ forEach: node.forEach, ++ orReplace: node.orReplace, ++ temporary: node.temporary, ++ queries: this.transformNodeList(node.queries), ++ function: this.transformNode(node.function), ++ when: this.transformNode(node.when), ++ order: this.transformNode(node.order), ++ }); ++ } ++ transformTriggerEvent(node) { ++ return (0, require_all_props_js_1.requireAllProps)({ ++ kind: 'TriggerEventNode', ++ event: node.event, ++ columns: this.transformNodeList(node.columns), ++ }); ++ } ++ transformTriggerOrder(node) { ++ return (0, require_all_props_js_1.requireAllProps)({ ++ kind: 'TriggerOrderNode', ++ order: node.order, ++ otherTriggerName: this.transformNode(node.otherTriggerName), + }); + } + transformColumnDefinition(node) { +@@ -315,6 +352,7 @@ class OperationNodeTransformer { + generated: this.transformNode(node.generated), + frontModifiers: this.transformNodeList(node.frontModifiers), + endModifiers: this.transformNodeList(node.endModifiers), ++ nullsNotDistinct: node.nullsNotDistinct, + }); + } + transformAddColumn(node) { +@@ -331,6 +369,14 @@ class OperationNodeTransformer { + cascade: node.cascade, + }); + } ++ transformDropTrigger(node) { ++ return (0, require_all_props_js_1.requireAllProps)({ ++ kind: 'DropTriggerNode', ++ name: this.transformNode(node.name), ++ ifExists: node.ifExists, ++ cascade: node.cascade, ++ }); ++ } + transformOrderBy(node) { + return (0, require_all_props_js_1.requireAllProps)({ + kind: 'OrderByNode', +@@ -416,6 +462,7 @@ class OperationNodeTransformer { + using: this.transformNode(node.using), + ifNotExists: node.ifNotExists, + where: this.transformNode(node.where), ++ nullsNotDistinct: node.nullsNotDistinct, + }); + } + transformList(node) { +@@ -445,6 +492,7 @@ class OperationNodeTransformer { + kind: 'UniqueConstraintNode', + columns: this.transformNodeList(node.columns), + name: this.transformNode(node.name), ++ nullsNotDistinct: node.nullsNotDistinct, + }); + } + transformForeignKeyConstraint(node) { +@@ -533,6 +581,8 @@ class OperationNodeTransformer { + columnAlterations: this.transformNodeList(node.columnAlterations), + addConstraint: this.transformNode(node.addConstraint), + dropConstraint: this.transformNode(node.dropConstraint), ++ addIndex: this.transformNode(node.addIndex), ++ dropIndex: this.transformNode(node.dropIndex), + }); + } + transformDropColumn(node) { +@@ -765,6 +815,16 @@ class OperationNodeTransformer { + values: this.transformNodeList(node.values), + }); + } ++ transformAddIndex(node) { ++ return (0, require_all_props_js_1.requireAllProps)({ ++ kind: 'AddIndexNode', ++ name: this.transformNode(node.name), ++ columns: this.transformNodeList(node.columns), ++ unique: node.unique, ++ using: this.transformNode(node.using), ++ ifNotExists: node.ifNotExists, ++ }); ++ } + transformDataType(node) { + // An Object.freezed leaf node. No need to clone. + return node; +diff --git a/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.d.ts b/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.d.ts +index 7c267cd..6a66bc7 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.d.ts +@@ -85,6 +85,11 @@ import { JSONPathNode } from './json-path-node.js'; + import { JSONPathLegNode } from './json-path-leg-node.js'; + import { JSONOperatorChainNode } from './json-operator-chain-node.js'; + import { TupleNode } from './tuple-node.js'; ++import { AddIndexNode } from './add-index-node.js'; ++import { CreateTriggerNode } from './create-trigger-node.js'; ++import { DropTriggerNode } from './drop-trigger-node.js'; ++import { TriggerEventNode } from './trigger-event-node.js'; ++import { TriggerOrderNode } from './trigger-order-node.js'; + export declare abstract class OperationNodeVisitor { + #private; + protected readonly nodeStack: OperationNode[]; +@@ -108,9 +113,13 @@ export declare abstract class OperationNodeVisitor { + protected abstract visitDeleteQuery(node: DeleteQueryNode): void; + protected abstract visitReturning(node: ReturningNode): void; + protected abstract visitCreateTable(node: CreateTableNode): void; ++ protected abstract visitCreateTrigger(node: CreateTriggerNode): void; ++ protected abstract visitTriggerEvent(node: TriggerEventNode): void; ++ protected abstract visitTriggerOrder(node: TriggerOrderNode): void; + protected abstract visitAddColumn(node: AddColumnNode): void; + protected abstract visitColumnDefinition(node: ColumnDefinitionNode): void; + protected abstract visitDropTable(node: DropTableNode): void; ++ protected abstract visitDropTrigger(node: DropTriggerNode): void; + protected abstract visitOrderBy(node: OrderByNode): void; + protected abstract visitOrderByItem(node: OrderByItemNode): void; + protected abstract visitGroupBy(node: GroupByNode): void; +@@ -176,4 +185,5 @@ export declare abstract class OperationNodeVisitor { + protected abstract visitJSONPathLeg(node: JSONPathLegNode): void; + protected abstract visitJSONOperatorChain(node: JSONOperatorChainNode): void; + protected abstract visitTuple(node: TupleNode): void; ++ protected abstract visitAddIndex(node: AddIndexNode): void; + } +diff --git a/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.js b/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.js +index 8a50e0b..acc4d6e 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.js ++++ b/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.js +@@ -94,6 +94,11 @@ class OperationNodeVisitor { + JSONPathLegNode: this.visitJSONPathLeg.bind(this), + JSONOperatorChainNode: this.visitJSONOperatorChain.bind(this), + TupleNode: this.visitTuple.bind(this), ++ AddIndexNode: this.visitAddIndex.bind(this), ++ CreateTriggerNode: this.visitCreateTrigger.bind(this), ++ TriggerEventNode: this.visitTriggerEvent.bind(this), ++ TriggerOrderNode: this.visitTriggerOrder.bind(this), ++ DropTriggerNode: this.visitDropTrigger.bind(this), + }); + visitNode = (node) => { + this.nodeStack.push(node); +diff --git a/node_modules/kysely/dist/cjs/operation-node/operation-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/operation-node.d.ts +index 24cad68..a01b9ed 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/operation-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/operation-node.d.ts +@@ -1,4 +1,4 @@ +-export type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode' | 'AggregateFunctionNode' | 'OverNode' | 'PartitionByNode' | 'PartitionByItemNode' | 'SetOperationNode' | 'BinaryOperationNode' | 'UnaryOperationNode' | 'UsingNode' | 'FunctionNode' | 'CaseNode' | 'WhenNode' | 'JSONReferenceNode' | 'JSONPathNode' | 'JSONPathLegNode' | 'JSONOperatorChainNode' | 'TupleNode'; ++export type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode' | 'AggregateFunctionNode' | 'OverNode' | 'PartitionByNode' | 'PartitionByItemNode' | 'SetOperationNode' | 'BinaryOperationNode' | 'UnaryOperationNode' | 'UsingNode' | 'FunctionNode' | 'CaseNode' | 'WhenNode' | 'JSONReferenceNode' | 'JSONPathNode' | 'JSONPathLegNode' | 'JSONOperatorChainNode' | 'TupleNode' | 'AddIndexNode' | 'CreateTriggerNode' | 'TriggerEventNode' | 'TriggerOrderNode' | 'DropTriggerNode'; + export interface OperationNode { + readonly kind: OperationNodeKind; + } +diff --git a/node_modules/kysely/dist/cjs/operation-node/operator-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/operator-node.d.ts +index 1076866..20a5fcb 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/operator-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/operator-node.d.ts +@@ -1,11 +1,11 @@ +-import { OperationNode } from './operation-node.js'; +-export declare const COMPARISON_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp"]; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++export declare const COMPARISON_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from"]; + export declare const ARITHMETIC_OPERATORS: readonly ["+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>"]; + export declare const JSON_OPERATORS: readonly ["->", "->>"]; +-export declare const BINARY_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"]; ++export declare const BINARY_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"]; + export declare const UNARY_FILTER_OPERATORS: readonly ["exists", "not exists"]; + export declare const UNARY_OPERATORS: readonly ["not", "-", "exists", "not exists"]; +-export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "not", "-", "exists", "not exists", "between", "between symmetric"]; ++export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "not", "-", "exists", "not exists", "between", "between symmetric"]; + export type ComparisonOperator = (typeof COMPARISON_OPERATORS)[number]; + export type ArithmeticOperator = (typeof ARITHMETIC_OPERATORS)[number]; + export type JSONOperator = (typeof JSON_OPERATORS)[number]; +diff --git a/node_modules/kysely/dist/cjs/operation-node/operator-node.js b/node_modules/kysely/dist/cjs/operation-node/operator-node.js +index 1b4ff0a..5407a85 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/operator-node.js ++++ b/node_modules/kysely/dist/cjs/operation-node/operator-node.js +@@ -37,6 +37,8 @@ exports.COMPARISON_OPERATORS = [ + '!!', + '<->', + 'regexp', ++ 'is distinct from', ++ 'is not distinct from', + ]; + exports.ARITHMETIC_OPERATORS = [ + '+', +diff --git a/node_modules/kysely/dist/cjs/operation-node/or-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/or-node.d.ts +index 4d8e9ce..ca76ae2 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/or-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/or-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface OrNode extends OperationNode { + readonly kind: 'OrNode'; + readonly left: OperationNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/order-by-item-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/order-by-item-node.d.ts +index 5a926f7..2964b97 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/order-by-item-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/order-by-item-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface OrderByItemNode extends OperationNode { + readonly kind: 'OrderByItemNode'; + readonly orderBy: OperationNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/order-by-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/order-by-node.d.ts +index ec862ab..aad64f5 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/order-by-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/order-by-node.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNode } from './operation-node.js'; +-import { OrderByItemNode } from './order-by-item-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { OrderByItemNode } from 'kysely/dist/cjs/operation-node/order-by-item-node.js'; + export interface OrderByNode extends OperationNode { + readonly kind: 'OrderByNode'; + readonly items: ReadonlyArray; +diff --git a/node_modules/kysely/dist/cjs/operation-node/over-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/over-node.d.ts +index 90fa893..9f04bf1 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/over-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/over-node.d.ts +@@ -1,8 +1,8 @@ +-import { OperationNode } from './operation-node.js'; +-import { OrderByItemNode } from './order-by-item-node.js'; +-import { OrderByNode } from './order-by-node.js'; +-import { PartitionByItemNode } from './partition-by-item-node.js'; +-import { PartitionByNode } from './partition-by-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { OrderByItemNode } from 'kysely/dist/cjs/operation-node/order-by-item-node.js'; ++import { OrderByNode } from 'kysely/dist/cjs/operation-node/order-by-node.js'; ++import { PartitionByItemNode } from 'kysely/dist/cjs/operation-node/partition-by-item-node.js'; ++import { PartitionByNode } from 'kysely/dist/cjs/operation-node/partition-by-node.js'; + export interface OverNode extends OperationNode { + readonly kind: 'OverNode'; + readonly orderBy?: OrderByNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/parens-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/parens-node.d.ts +index 8a84c5d..8052a4f 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/parens-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/parens-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface ParensNode extends OperationNode { + readonly kind: 'ParensNode'; + readonly node: OperationNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/partition-by-item-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/partition-by-item-node.d.ts +index 91b1035..d851bf5 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/partition-by-item-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/partition-by-item-node.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNode } from './operation-node.js'; +-import { SimpleReferenceExpressionNode } from './simple-reference-expression-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { SimpleReferenceExpressionNode } from 'kysely/dist/cjs/operation-node/simple-reference-expression-node.js'; + export interface PartitionByItemNode extends OperationNode { + readonly kind: 'PartitionByItemNode'; + readonly partitionBy: SimpleReferenceExpressionNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/partition-by-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/partition-by-node.d.ts +index 92f2c3d..3b9595c 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/partition-by-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/partition-by-node.d.ts +@@ -1,5 +1,5 @@ +-import { PartitionByItemNode } from './partition-by-item-node.js'; +-import { OperationNode } from './operation-node.js'; ++import { PartitionByItemNode } from 'kysely/dist/cjs/operation-node/partition-by-item-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface PartitionByNode extends OperationNode { + readonly kind: 'PartitionByNode'; + readonly items: ReadonlyArray; +diff --git a/node_modules/kysely/dist/cjs/operation-node/primary-constraint-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/primary-constraint-node.d.ts +index 63de5ec..be729e7 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/primary-constraint-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/primary-constraint-node.d.ts +@@ -1,6 +1,6 @@ +-import { ColumnNode } from './column-node.js'; +-import { IdentifierNode } from './identifier-node.js'; +-import { OperationNode } from './operation-node.js'; ++import { ColumnNode } from 'kysely/dist/cjs/operation-node/column-node.js'; ++import { IdentifierNode } from 'kysely/dist/cjs/operation-node/identifier-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface PrimaryKeyConstraintNode extends OperationNode { + readonly kind: 'PrimaryKeyConstraintNode'; + readonly columns: ReadonlyArray; +diff --git a/node_modules/kysely/dist/cjs/operation-node/primitive-value-list-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/primitive-value-list-node.d.ts +index d47b86f..142ebae 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/primitive-value-list-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/primitive-value-list-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + /** + * This node is basically just a performance optimization over the normal ValueListNode. + * The queries often contain large arrays of primitive values (for example in a `where in` list) +diff --git a/node_modules/kysely/dist/cjs/operation-node/query-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/query-node.d.ts +index bf6ef92..133557d 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/query-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/query-node.d.ts +@@ -1,15 +1,15 @@ +-import { InsertQueryNode } from './insert-query-node.js'; +-import { SelectQueryNode } from './select-query-node.js'; +-import { UpdateQueryNode } from './update-query-node.js'; +-import { DeleteQueryNode } from './delete-query-node.js'; +-import { WhereNode } from './where-node.js'; +-import { JoinNode } from './join-node.js'; +-import { SelectionNode } from './selection-node.js'; +-import { ReturningNode } from './returning-node.js'; +-import { OperationNode } from './operation-node.js'; +-import { ExplainNode } from './explain-node.js'; +-import { ExplainFormat } from '../util/explainable.js'; +-import { Expression } from '../expression/expression.js'; ++import { InsertQueryNode } from 'kysely/dist/cjs/operation-node/insert-query-node.js'; ++import { SelectQueryNode } from 'kysely/dist/cjs/operation-node/select-query-node.js'; ++import { UpdateQueryNode } from 'kysely/dist/cjs/operation-node/update-query-node.js'; ++import { DeleteQueryNode } from 'kysely/dist/cjs/operation-node/delete-query-node.js'; ++import { WhereNode } from 'kysely/dist/cjs/operation-node/where-node.js'; ++import { JoinNode } from 'kysely/dist/cjs/operation-node/join-node.js'; ++import { SelectionNode } from 'kysely/dist/cjs/operation-node/selection-node.js'; ++import { ReturningNode } from 'kysely/dist/cjs/operation-node/returning-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { ExplainNode } from 'kysely/dist/cjs/operation-node/explain-node.js'; ++import { ExplainFormat } from 'kysely/dist/cjs/util/explainable.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; + export type QueryNode = SelectQueryNode | InsertQueryNode | UpdateQueryNode | DeleteQueryNode; + type HasJoins = { + joins?: ReadonlyArray; +diff --git a/node_modules/kysely/dist/cjs/operation-node/raw-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/raw-node.d.ts +index d0ebaa1..e8493de 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/raw-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/raw-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface RawNode extends OperationNode { + readonly kind: 'RawNode'; + readonly sqlFragments: ReadonlyArray; +diff --git a/node_modules/kysely/dist/cjs/operation-node/reference-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/reference-node.d.ts +index 25451af..06b6906 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/reference-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/reference-node.d.ts +@@ -1,7 +1,7 @@ +-import { OperationNode } from './operation-node.js'; +-import { ColumnNode } from './column-node.js'; +-import { TableNode } from './table-node.js'; +-import { SelectAllNode } from './select-all-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { ColumnNode } from 'kysely/dist/cjs/operation-node/column-node.js'; ++import { TableNode } from 'kysely/dist/cjs/operation-node/table-node.js'; ++import { SelectAllNode } from 'kysely/dist/cjs/operation-node/select-all-node.js'; + export interface ReferenceNode extends OperationNode { + readonly kind: 'ReferenceNode'; + readonly column: ColumnNode | SelectAllNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/references-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/references-node.d.ts +index bca9b92..261c6ca 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/references-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/references-node.d.ts +@@ -1,7 +1,7 @@ +-import { OperationNode } from './operation-node.js'; +-import { ColumnNode } from './column-node.js'; +-import { TableNode } from './table-node.js'; +-import { ArrayItemType } from '../util/type-utils.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { ColumnNode } from 'kysely/dist/cjs/operation-node/column-node.js'; ++import { TableNode } from 'kysely/dist/cjs/operation-node/table-node.js'; ++import { ArrayItemType } from 'kysely/dist/cjs/util/type-utils.js'; + export declare const ON_MODIFY_FOREIGN_ACTIONS: readonly ["no action", "restrict", "cascade", "set null", "set default"]; + export type OnModifyForeignAction = ArrayItemType; + export interface ReferencesNode extends OperationNode { +diff --git a/node_modules/kysely/dist/cjs/operation-node/rename-column-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/rename-column-node.d.ts +index 6aaa14a..14f4d87 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/rename-column-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/rename-column-node.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNode } from './operation-node.js'; +-import { ColumnNode } from './column-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { ColumnNode } from 'kysely/dist/cjs/operation-node/column-node.js'; + export interface RenameColumnNode extends OperationNode { + readonly kind: 'RenameColumnNode'; + readonly column: ColumnNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/returning-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/returning-node.d.ts +index 6504839..2000c94 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/returning-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/returning-node.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNode } from './operation-node.js'; +-import { SelectionNode } from './selection-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { SelectionNode } from 'kysely/dist/cjs/operation-node/selection-node.js'; + export interface ReturningNode extends OperationNode { + readonly kind: 'ReturningNode'; + readonly selections: ReadonlyArray; +diff --git a/node_modules/kysely/dist/cjs/operation-node/schemable-identifier-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/schemable-identifier-node.d.ts +index 0373909..18afb74 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/schemable-identifier-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/schemable-identifier-node.d.ts +@@ -1,5 +1,5 @@ +-import { IdentifierNode } from './identifier-node.js'; +-import { OperationNode } from './operation-node.js'; ++import { IdentifierNode } from 'kysely/dist/cjs/operation-node/identifier-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface SchemableIdentifierNode extends OperationNode { + readonly kind: 'SchemableIdentifierNode'; + readonly schema?: IdentifierNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/select-all-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/select-all-node.d.ts +index ebdb84d..facdf67 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/select-all-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/select-all-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface SelectAllNode extends OperationNode { + readonly kind: 'SelectAllNode'; + } +diff --git a/node_modules/kysely/dist/cjs/operation-node/select-modifier-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/select-modifier-node.d.ts +index 6cafd87..2d3273f 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/select-modifier-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/select-modifier-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export type SelectModifier = 'ForUpdate' | 'ForNoKeyUpdate' | 'ForShare' | 'ForKeyShare' | 'NoWait' | 'SkipLocked' | 'Distinct'; + export interface SelectModifierNode extends OperationNode { + readonly kind: 'SelectModifierNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/select-query-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/select-query-node.d.ts +index 8566716..f6adbb0 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/select-query-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/select-query-node.d.ts +@@ -1,19 +1,19 @@ +-import { FromNode } from './from-node.js'; +-import { GroupByItemNode } from './group-by-item-node.js'; +-import { GroupByNode } from './group-by-node.js'; +-import { HavingNode } from './having-node.js'; +-import { JoinNode } from './join-node.js'; +-import { LimitNode } from './limit-node.js'; +-import { OffsetNode } from './offset-node.js'; +-import { OperationNode } from './operation-node.js'; +-import { OrderByItemNode } from './order-by-item-node.js'; +-import { OrderByNode } from './order-by-node.js'; +-import { SelectionNode } from './selection-node.js'; +-import { WhereNode } from './where-node.js'; +-import { WithNode } from './with-node.js'; +-import { SelectModifierNode } from './select-modifier-node.js'; +-import { ExplainNode } from './explain-node.js'; +-import { SetOperationNode } from './set-operation-node.js'; ++import { FromNode } from 'kysely/dist/cjs/operation-node/from-node.js'; ++import { GroupByItemNode } from 'kysely/dist/cjs/operation-node/group-by-item-node.js'; ++import { GroupByNode } from 'kysely/dist/cjs/operation-node/group-by-node.js'; ++import { HavingNode } from 'kysely/dist/cjs/operation-node/having-node.js'; ++import { JoinNode } from 'kysely/dist/cjs/operation-node/join-node.js'; ++import { LimitNode } from 'kysely/dist/cjs/operation-node/limit-node.js'; ++import { OffsetNode } from 'kysely/dist/cjs/operation-node/offset-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { OrderByItemNode } from 'kysely/dist/cjs/operation-node/order-by-item-node.js'; ++import { OrderByNode } from 'kysely/dist/cjs/operation-node/order-by-node.js'; ++import { SelectionNode } from 'kysely/dist/cjs/operation-node/selection-node.js'; ++import { WhereNode } from 'kysely/dist/cjs/operation-node/where-node.js'; ++import { WithNode } from 'kysely/dist/cjs/operation-node/with-node.js'; ++import { SelectModifierNode } from 'kysely/dist/cjs/operation-node/select-modifier-node.js'; ++import { ExplainNode } from 'kysely/dist/cjs/operation-node/explain-node.js'; ++import { SetOperationNode } from 'kysely/dist/cjs/operation-node/set-operation-node.js'; + export interface SelectQueryNode extends OperationNode { + readonly kind: 'SelectQueryNode'; + readonly from?: FromNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/selection-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/selection-node.d.ts +index 65c3567..f82ed6a 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/selection-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/selection-node.d.ts +@@ -1,8 +1,8 @@ +-import { AliasNode } from './alias-node.js'; +-import { OperationNode } from './operation-node.js'; +-import { SelectAllNode } from './select-all-node.js'; +-import { SimpleReferenceExpressionNode } from './simple-reference-expression-node.js'; +-import { TableNode } from './table-node.js'; ++import { AliasNode } from 'kysely/dist/cjs/operation-node/alias-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { SelectAllNode } from 'kysely/dist/cjs/operation-node/select-all-node.js'; ++import { SimpleReferenceExpressionNode } from 'kysely/dist/cjs/operation-node/simple-reference-expression-node.js'; ++import { TableNode } from 'kysely/dist/cjs/operation-node/table-node.js'; + type SelectionNodeChild = SimpleReferenceExpressionNode | AliasNode | SelectAllNode; + export interface SelectionNode extends OperationNode { + readonly kind: 'SelectionNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/set-operation-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/set-operation-node.d.ts +index 31f9efc..b924286 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/set-operation-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/set-operation-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export type SetOperator = 'union' | 'intersect' | 'except'; + export interface SetOperationNode extends OperationNode { + kind: 'SetOperationNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/simple-reference-expression-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/simple-reference-expression-node.d.ts +index f89eb48..7c6ef63 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/simple-reference-expression-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/simple-reference-expression-node.d.ts +@@ -1,3 +1,3 @@ +-import { ColumnNode } from './column-node.js'; +-import { ReferenceNode } from './reference-node.js'; ++import { ColumnNode } from 'kysely/dist/cjs/operation-node/column-node.js'; ++import { ReferenceNode } from 'kysely/dist/cjs/operation-node/reference-node.js'; + export type SimpleReferenceExpressionNode = ColumnNode | ReferenceNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/table-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/table-node.d.ts +index b6fba34..c6c3673 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/table-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/table-node.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNode } from './operation-node.js'; +-import { SchemableIdentifierNode } from './schemable-identifier-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { SchemableIdentifierNode } from 'kysely/dist/cjs/operation-node/schemable-identifier-node.js'; + export interface TableNode extends OperationNode { + readonly kind: 'TableNode'; + readonly table: SchemableIdentifierNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/trigger-event-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/trigger-event-node.d.ts +new file mode 100644 +index 0000000..fcdf121 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/trigger-event-node.d.ts +@@ -0,0 +1,15 @@ ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++export type TriggerEvent = 'delete' | 'update' | 'insert' | 'truncate'; ++export type TriggerEventNodeParams = Omit; ++export interface TriggerEventNode extends OperationNode { ++ readonly kind: 'TriggerEventNode'; ++ readonly event: TriggerEvent; ++ readonly columns?: ReadonlyArray; ++} ++/** ++ * @internal ++ */ ++export declare const TriggerEventNode: Readonly<{ ++ is(node: OperationNode): node is TriggerEventNode; ++ create(event: TriggerEvent, columns?: ReadonlyArray): TriggerEventNode; ++}>; +diff --git a/node_modules/kysely/dist/cjs/operation-node/trigger-event-node.js b/node_modules/kysely/dist/cjs/operation-node/trigger-event-node.js +new file mode 100644 +index 0000000..85f3975 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/trigger-event-node.js +@@ -0,0 +1,19 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.TriggerEventNode = void 0; ++const object_utils_js_1 = require("../util/object-utils.js"); ++/** ++ * @internal ++ */ ++exports.TriggerEventNode = (0, object_utils_js_1.freeze)({ ++ is(node) { ++ return node.kind === 'TriggerEventNode'; ++ }, ++ create(event, columns) { ++ return (0, object_utils_js_1.freeze)({ ++ kind: 'TriggerEventNode', ++ event, ++ columns, ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/cjs/operation-node/trigger-order-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/trigger-order-node.d.ts +new file mode 100644 +index 0000000..5db90ed +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/trigger-order-node.d.ts +@@ -0,0 +1,16 @@ ++import { IdentifierNode } from 'kysely/dist/cjs/operation-node/identifier-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++export type TriggerOrder = 'follows' | 'precedes'; ++export type TriggerOrderNodeParams = Omit; ++export interface TriggerOrderNode extends OperationNode { ++ readonly kind: 'TriggerOrderNode'; ++ readonly order: TriggerOrder; ++ readonly otherTriggerName: IdentifierNode; ++} ++/** ++ * @internal ++ */ ++export declare const TriggerOrderNode: Readonly<{ ++ is(node: OperationNode): node is TriggerOrderNode; ++ create(order: TriggerOrder, otherTriggerName: IdentifierNode): TriggerOrderNode; ++}>; +diff --git a/node_modules/kysely/dist/cjs/operation-node/trigger-order-node.js b/node_modules/kysely/dist/cjs/operation-node/trigger-order-node.js +new file mode 100644 +index 0000000..2b40780 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/trigger-order-node.js +@@ -0,0 +1,19 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.TriggerOrderNode = void 0; ++const object_utils_js_1 = require("../util/object-utils.js"); ++/** ++ * @internal ++ */ ++exports.TriggerOrderNode = (0, object_utils_js_1.freeze)({ ++ is(node) { ++ return node.kind === 'TriggerOrderNode'; ++ }, ++ create(order, otherTriggerName) { ++ return (0, object_utils_js_1.freeze)({ ++ kind: 'TriggerOrderNode', ++ order, ++ otherTriggerName, ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.d.ts +index c179f1f..5111298 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.d.ts +@@ -1,15 +1,18 @@ +-import { ColumnNode } from './column-node.js'; +-import { IdentifierNode } from './identifier-node.js'; +-import { OperationNode } from './operation-node.js'; ++import { ColumnNode } from 'kysely/dist/cjs/operation-node/column-node.js'; ++import { IdentifierNode } from 'kysely/dist/cjs/operation-node/identifier-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface UniqueConstraintNode extends OperationNode { + readonly kind: 'UniqueConstraintNode'; + readonly columns: ReadonlyArray; + readonly name?: IdentifierNode; ++ readonly nullsNotDistinct?: boolean; + } ++export type UniqueConstraintNodeProps = Omit, 'kind'>; + /** + * @internal + */ + export declare const UniqueConstraintNode: Readonly<{ + is(node: OperationNode): node is UniqueConstraintNode; +- create(columns: string[], constraintName?: string): UniqueConstraintNode; ++ create(columns: string[], constraintName?: string, nullsNotDistinct?: boolean): UniqueConstraintNode; ++ cloneWith(node: UniqueConstraintNode, props: UniqueConstraintNodeProps): UniqueConstraintNode; + }>; +diff --git a/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.js b/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.js +index d615f74..ba9b265 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.js ++++ b/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.js +@@ -11,11 +11,18 @@ exports.UniqueConstraintNode = (0, object_utils_js_1.freeze)({ + is(node) { + return node.kind === 'UniqueConstraintNode'; + }, +- create(columns, constraintName) { ++ create(columns, constraintName, nullsNotDistinct) { + return (0, object_utils_js_1.freeze)({ + kind: 'UniqueConstraintNode', + columns: (0, object_utils_js_1.freeze)(columns.map(column_node_js_1.ColumnNode.create)), + name: constraintName ? identifier_node_js_1.IdentifierNode.create(constraintName) : undefined, ++ nullsNotDistinct, ++ }); ++ }, ++ cloneWith(node, props) { ++ return (0, object_utils_js_1.freeze)({ ++ ...node, ++ ...props, + }); + }, + }); +diff --git a/node_modules/kysely/dist/cjs/operation-node/update-query-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/update-query-node.d.ts +index 6fcc5e7..29fb124 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/update-query-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/update-query-node.d.ts +@@ -1,13 +1,13 @@ +-import { ColumnUpdateNode } from './column-update-node.js'; +-import { JoinNode } from './join-node.js'; +-import { OperationNode } from './operation-node.js'; +-import { PrimitiveValueListNode } from './primitive-value-list-node.js'; +-import { ReturningNode } from './returning-node.js'; +-import { ValueListNode } from './value-list-node.js'; +-import { WhereNode } from './where-node.js'; +-import { WithNode } from './with-node.js'; +-import { FromNode } from './from-node.js'; +-import { ExplainNode } from './explain-node.js'; ++import { ColumnUpdateNode } from 'kysely/dist/cjs/operation-node/column-update-node.js'; ++import { JoinNode } from 'kysely/dist/cjs/operation-node/join-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { PrimitiveValueListNode } from 'kysely/dist/cjs/operation-node/primitive-value-list-node.js'; ++import { ReturningNode } from 'kysely/dist/cjs/operation-node/returning-node.js'; ++import { ValueListNode } from 'kysely/dist/cjs/operation-node/value-list-node.js'; ++import { WhereNode } from 'kysely/dist/cjs/operation-node/where-node.js'; ++import { WithNode } from 'kysely/dist/cjs/operation-node/with-node.js'; ++import { FromNode } from 'kysely/dist/cjs/operation-node/from-node.js'; ++import { ExplainNode } from 'kysely/dist/cjs/operation-node/explain-node.js'; + export type UpdateValuesNode = ValueListNode | PrimitiveValueListNode; + export interface UpdateQueryNode extends OperationNode { + readonly kind: 'UpdateQueryNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/using-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/using-node.d.ts +index 01da795..901c8e5 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/using-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/using-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface UsingNode extends OperationNode { + readonly kind: 'UsingNode'; + readonly tables: ReadonlyArray; +diff --git a/node_modules/kysely/dist/cjs/operation-node/value-list-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/value-list-node.d.ts +index e48e781..bf4a346 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/value-list-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/value-list-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface ValueListNode extends OperationNode { + readonly kind: 'ValueListNode'; + readonly values: ReadonlyArray; +diff --git a/node_modules/kysely/dist/cjs/operation-node/value-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/value-node.d.ts +index c5fdc09..6068adc 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/value-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/value-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface ValueNode extends OperationNode { + readonly kind: 'ValueNode'; + readonly value: unknown; +diff --git a/node_modules/kysely/dist/cjs/operation-node/values-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/values-node.d.ts +index 86590c6..bb8127c 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/values-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/values-node.d.ts +@@ -1,6 +1,6 @@ +-import { OperationNode } from './operation-node.js'; +-import { PrimitiveValueListNode } from './primitive-value-list-node.js'; +-import { ValueListNode } from './value-list-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { PrimitiveValueListNode } from 'kysely/dist/cjs/operation-node/primitive-value-list-node.js'; ++import { ValueListNode } from 'kysely/dist/cjs/operation-node/value-list-node.js'; + export type ValuesItemNode = ValueListNode | PrimitiveValueListNode; + export interface ValuesNode extends OperationNode { + readonly kind: 'ValuesNode'; +diff --git a/node_modules/kysely/dist/cjs/operation-node/when-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/when-node.d.ts +index c6f1db8..8be8ebb 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/when-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/when-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface WhenNode extends OperationNode { + readonly kind: 'WhenNode'; + readonly condition: OperationNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/where-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/where-node.d.ts +index 44f9fbd..a3e79d1 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/where-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/where-node.d.ts +@@ -1,4 +1,4 @@ +-import { OperationNode } from './operation-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export interface WhereNode extends OperationNode { + readonly kind: 'WhereNode'; + readonly where: OperationNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/with-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/with-node.d.ts +index 78fecfd..d4fcebc 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/with-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/with-node.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNode } from './operation-node.js'; +-import { CommonTableExpressionNode } from './common-table-expression-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { CommonTableExpressionNode } from 'kysely/dist/cjs/operation-node/common-table-expression-node.js'; + export type WithNodeParams = Omit; + export interface WithNode extends OperationNode { + readonly kind: 'WithNode'; +diff --git a/node_modules/kysely/dist/cjs/parser/binary-operation-parser.d.ts b/node_modules/kysely/dist/cjs/parser/binary-operation-parser.d.ts +index 442aeb2..2585655 100644 +--- a/node_modules/kysely/dist/cjs/parser/binary-operation-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/binary-operation-parser.d.ts +@@ -1,11 +1,11 @@ +-import { BinaryOperationNode } from '../operation-node/binary-operation-node.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { ComparisonOperator, BinaryOperator, Operator } from '../operation-node/operator-node.js'; +-import { ExtractTypeFromReferenceExpression, ExtractTypeFromStringReference, ReferenceExpression, StringReference } from './reference-parser.js'; +-import { ValueExpression, ValueExpressionOrList } from './value-parser.js'; +-import { OperationNode } from '../operation-node/operation-node.js'; +-import { Expression } from '../expression/expression.js'; +-import { SelectType } from '../util/column-type.js'; ++import { BinaryOperationNode } from 'kysely/dist/cjs/operation-node/binary-operation-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { ComparisonOperator, BinaryOperator, Operator } from 'kysely/dist/cjs/operation-node/operator-node.js'; ++import { ExtractTypeFromReferenceExpression, ExtractTypeFromStringReference, ReferenceExpression, StringReference } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { ValueExpression, ValueExpressionOrList } from 'kysely/dist/cjs/parser/value-parser.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { SelectType } from 'kysely/dist/cjs/util/column-type.js'; + export type OperandValueExpression = ValueExpression>; + export type OperandValueExpressionOrList = ValueExpressionOrList | null>; + export type OperatorExpression = Operator | Expression; +diff --git a/node_modules/kysely/dist/cjs/parser/binary-operation-parser.js b/node_modules/kysely/dist/cjs/parser/binary-operation-parser.js +index 2ebff87..b5e9a08 100644 +--- a/node_modules/kysely/dist/cjs/parser/binary-operation-parser.js ++++ b/node_modules/kysely/dist/cjs/parser/binary-operation-parser.js +@@ -41,7 +41,7 @@ exports.parseFilterObject = parseFilterObject; + function parseFilterList(list, combinator) { + const combine = combinator === 'and' ? and_node_js_1.AndNode.create : or_node_js_1.OrNode.create; + if (list.length === 0) { +- return value_node_js_1.ValueNode.createImmediate(combinator === 'and'); ++ return binary_operation_node_js_1.BinaryOperationNode.create(value_node_js_1.ValueNode.createImmediate(1), operator_node_js_1.OperatorNode.create('='), value_node_js_1.ValueNode.createImmediate(combinator === 'and' ? 1 : 0)); + } + let node = toOperationNode(list[0]); + for (let i = 1; i < list.length; ++i) { +diff --git a/node_modules/kysely/dist/cjs/parser/coalesce-parser.d.ts b/node_modules/kysely/dist/cjs/parser/coalesce-parser.d.ts +index ad11860..d71013b 100644 +--- a/node_modules/kysely/dist/cjs/parser/coalesce-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/coalesce-parser.d.ts +@@ -1,2 +1,2 @@ +-import { ExtractTypeFromReferenceExpression, ReferenceExpression } from './reference-parser.js'; ++import { ExtractTypeFromReferenceExpression, ReferenceExpression } from 'kysely/dist/cjs/parser/reference-parser.js'; + export type CoalesceReferenceExpressionList = RE extends [] ? O : RE extends [infer L, ...infer R] ? L extends ReferenceExpression ? null extends ExtractTypeFromReferenceExpression ? CoalesceReferenceExpressionList[] ? R : never, O | ExtractTypeFromReferenceExpression> : Exclude | ExtractTypeFromReferenceExpression : never : never; +diff --git a/node_modules/kysely/dist/cjs/parser/data-type-parser.d.ts b/node_modules/kysely/dist/cjs/parser/data-type-parser.d.ts +index 5469925..2d9e6e9 100644 +--- a/node_modules/kysely/dist/cjs/parser/data-type-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/data-type-parser.d.ts +@@ -1,5 +1,5 @@ +-import { Expression } from '../expression/expression.js'; +-import { ColumnDataType } from '../operation-node/data-type-node.js'; +-import { OperationNode } from '../operation-node/operation-node.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { ColumnDataType } from 'kysely/dist/cjs/operation-node/data-type-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export type DataTypeExpression = ColumnDataType | Expression; + export declare function parseDataTypeExpression(dataType: DataTypeExpression): OperationNode; +diff --git a/node_modules/kysely/dist/cjs/parser/default-value-parser.d.ts b/node_modules/kysely/dist/cjs/parser/default-value-parser.d.ts +index 332773a..dda387f 100644 +--- a/node_modules/kysely/dist/cjs/parser/default-value-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/default-value-parser.d.ts +@@ -1,4 +1,4 @@ +-import { Expression } from '../expression/expression.js'; +-import { OperationNode } from '../operation-node/operation-node.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export type DefaultValueExpression = unknown | Expression; + export declare function parseDefaultValueExpression(value: DefaultValueExpression): OperationNode; +diff --git a/node_modules/kysely/dist/cjs/parser/expression-parser.d.ts b/node_modules/kysely/dist/cjs/parser/expression-parser.d.ts +index ad657a1..dc6f087 100644 +--- a/node_modules/kysely/dist/cjs/parser/expression-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/expression-parser.d.ts +@@ -1,8 +1,8 @@ +-import { AliasedExpression, Expression } from '../expression/expression.js'; +-import { AliasNode } from '../operation-node/alias-node.js'; +-import { OperationNode } from '../operation-node/operation-node.js'; +-import { ExpressionBuilder } from '../expression/expression-builder.js'; +-import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js'; ++import { AliasedExpression, Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { AliasNode } from 'kysely/dist/cjs/operation-node/alias-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { ExpressionBuilder } from 'kysely/dist/cjs/expression/expression-builder.js'; ++import { SelectQueryBuilderExpression } from 'kysely/dist/cjs/query-builder/select-query-builder-expression.js'; + /** + * Like `Expression` but also accepts a select query with an output + * type extending `Record`. This type is useful because SQL +diff --git a/node_modules/kysely/dist/cjs/parser/group-by-parser.d.ts b/node_modules/kysely/dist/cjs/parser/group-by-parser.d.ts +index 2338e36..19ffb2e 100644 +--- a/node_modules/kysely/dist/cjs/parser/group-by-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/group-by-parser.d.ts +@@ -1,6 +1,6 @@ +-import { GroupByItemNode } from '../operation-node/group-by-item-node.js'; +-import { ExpressionBuilder } from '../expression/expression-builder.js'; +-import { ReferenceExpression } from './reference-parser.js'; ++import { GroupByItemNode } from 'kysely/dist/cjs/operation-node/group-by-item-node.js'; ++import { ExpressionBuilder } from 'kysely/dist/cjs/expression/expression-builder.js'; ++import { ReferenceExpression } from 'kysely/dist/cjs/parser/reference-parser.js'; + export type GroupByExpression = ReferenceExpression | (keyof O & string); + export type GroupByArg = GroupByExpression | ReadonlyArray> | ((eb: ExpressionBuilder) => ReadonlyArray>); + export declare function parseGroupBy(groupBy: GroupByArg): GroupByItemNode[]; +diff --git a/node_modules/kysely/dist/cjs/parser/insert-values-parser.d.ts b/node_modules/kysely/dist/cjs/parser/insert-values-parser.d.ts +index 4560fab..bd1a505 100644 +--- a/node_modules/kysely/dist/cjs/parser/insert-values-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/insert-values-parser.d.ts +@@ -1,8 +1,8 @@ +-import { ColumnNode } from '../operation-node/column-node.js'; +-import { ValueExpression } from './value-parser.js'; +-import { ValuesNode } from '../operation-node/values-node.js'; +-import { NonNullableInsertKeys, NullableInsertKeys, InsertType } from '../util/column-type.js'; +-import { ExpressionBuilder } from '../expression/expression-builder.js'; ++import { ColumnNode } from 'kysely/dist/cjs/operation-node/column-node.js'; ++import { ValueExpression } from 'kysely/dist/cjs/parser/value-parser.js'; ++import { ValuesNode } from 'kysely/dist/cjs/operation-node/values-node.js'; ++import { NonNullableInsertKeys, NullableInsertKeys, InsertType } from 'kysely/dist/cjs/util/column-type.js'; ++import { ExpressionBuilder } from 'kysely/dist/cjs/expression/expression-builder.js'; + export type InsertObject = { + [C in NonNullableInsertKeys]: ValueExpression>; + } & { +diff --git a/node_modules/kysely/dist/cjs/parser/join-parser.d.ts b/node_modules/kysely/dist/cjs/parser/join-parser.d.ts +index fcf33ef..91e1f85 100644 +--- a/node_modules/kysely/dist/cjs/parser/join-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/join-parser.d.ts +@@ -1,7 +1,7 @@ +-import { JoinNode, JoinType } from '../operation-node/join-node.js'; +-import { AnyColumn, AnyColumnWithTable, DrainOuterGeneric } from '../util/type-utils.js'; +-import { From, FromTables } from './table-parser.js'; +-import { JoinBuilder } from '../query-builder/join-builder.js'; ++import { JoinNode, JoinType } from 'kysely/dist/cjs/operation-node/join-node.js'; ++import { AnyColumn, AnyColumnWithTable, DrainOuterGeneric } from 'kysely/dist/cjs/util/type-utils.js'; ++import { From, FromTables } from 'kysely/dist/cjs/parser/table-parser.js'; ++import { JoinBuilder } from 'kysely/dist/cjs/query-builder/join-builder.js'; + export type JoinReferenceExpression = DrainOuterGeneric | AnyJoinColumnWithTable>; + export type JoinCallbackExpression = (join: JoinBuilder, FromTables>) => JoinBuilder; + type AnyJoinColumn = AnyColumn, FromTables>; +diff --git a/node_modules/kysely/dist/cjs/parser/order-by-parser.d.ts b/node_modules/kysely/dist/cjs/parser/order-by-parser.d.ts +index 40d5d0e..329449c 100644 +--- a/node_modules/kysely/dist/cjs/parser/order-by-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/order-by-parser.d.ts +@@ -1,7 +1,7 @@ +-import { Expression } from '../expression/expression.js'; +-import { OrderByItemNode } from '../operation-node/order-by-item-node.js'; +-import { StringReference } from './reference-parser.js'; +-import { ReferenceExpression } from './reference-parser.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { OrderByItemNode } from 'kysely/dist/cjs/operation-node/order-by-item-node.js'; ++import { StringReference } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { ReferenceExpression } from 'kysely/dist/cjs/parser/reference-parser.js'; + export type OrderByDirection = 'asc' | 'desc'; + export declare function isOrderByDirection(thing: unknown): thing is OrderByDirection; + export type DirectedOrderByStringReference = `${StringReference | (keyof O & string)} ${OrderByDirection}`; +diff --git a/node_modules/kysely/dist/cjs/parser/partition-by-parser.d.ts b/node_modules/kysely/dist/cjs/parser/partition-by-parser.d.ts +index 4a08f74..15a1c3e 100644 +--- a/node_modules/kysely/dist/cjs/parser/partition-by-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/partition-by-parser.d.ts +@@ -1,6 +1,6 @@ +-import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js'; +-import { PartitionByItemNode } from '../operation-node/partition-by-item-node.js'; +-import { StringReference } from './reference-parser.js'; ++import { DynamicReferenceBuilder } from 'kysely/dist/cjs/dynamic/dynamic-reference-builder.js'; ++import { PartitionByItemNode } from 'kysely/dist/cjs/operation-node/partition-by-item-node.js'; ++import { StringReference } from 'kysely/dist/cjs/parser/reference-parser.js'; + export type PartitionByExpression = StringReference | DynamicReferenceBuilder; + export type PartitionByExpressionOrList = ReadonlyArray> | PartitionByExpression; + export declare function parsePartitionBy(partitionBy: PartitionByExpressionOrList): PartitionByItemNode[]; +diff --git a/node_modules/kysely/dist/cjs/parser/reference-parser.d.ts b/node_modules/kysely/dist/cjs/parser/reference-parser.d.ts +index cd4d656..9c530cf 100644 +--- a/node_modules/kysely/dist/cjs/parser/reference-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/reference-parser.d.ts +@@ -1,22 +1,23 @@ +-import { AliasNode } from '../operation-node/alias-node.js'; +-import { ColumnNode } from '../operation-node/column-node.js'; +-import { ReferenceNode } from '../operation-node/reference-node.js'; +-import { AnyColumn, AnyColumnWithTable, ExtractColumnType } from '../util/type-utils.js'; +-import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js'; +-import { ExpressionOrFactory } from './expression-parser.js'; +-import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js'; +-import { SelectType } from '../util/column-type.js'; +-import { OperationNode } from '../operation-node/operation-node.js'; +-import { Expression } from '../expression/expression.js'; +-import { SimpleReferenceExpressionNode } from '../operation-node/simple-reference-expression-node.js'; +-import { OrderByDirection } from './order-by-parser.js'; +-import { JSONOperatorWith$ } from '../operation-node/operator-node.js'; +-import { JSONReferenceNode } from '../operation-node/json-reference-node.js'; ++import { AliasNode } from 'kysely/dist/cjs/operation-node/alias-node.js'; ++import { ColumnNode } from 'kysely/dist/cjs/operation-node/column-node.js'; ++import { ReferenceNode } from 'kysely/dist/cjs/operation-node/reference-node.js'; ++import { AnyColumn, AnyColumnWithTable, ExtractColumnType } from 'kysely/dist/cjs/util/type-utils.js'; ++import { SelectQueryBuilderExpression } from 'kysely/dist/cjs/query-builder/select-query-builder-expression.js'; ++import { ExpressionOrFactory } from 'kysely/dist/cjs/parser/expression-parser.js'; ++import { DynamicReferenceBuilder } from 'kysely/dist/cjs/dynamic/dynamic-reference-builder.js'; ++import { SelectType } from 'kysely/dist/cjs/util/column-type.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { SimpleReferenceExpressionNode } from 'kysely/dist/cjs/operation-node/simple-reference-expression-node.js'; ++import { OrderByDirection } from 'kysely/dist/cjs/parser/order-by-parser.js'; ++import { JSONOperatorWith$ } from 'kysely/dist/cjs/operation-node/operator-node.js'; ++import { JSONReferenceNode } from 'kysely/dist/cjs/operation-node/json-reference-node.js'; + export type StringReference = AnyColumn | AnyColumnWithTable; + export type SimpleReferenceExpression = StringReference | DynamicReferenceBuilder; + export type ReferenceExpression = SimpleReferenceExpression | ExpressionOrFactory; + export type ReferenceExpressionOrList = ReferenceExpression | ReadonlyArray>; +-export type ExtractTypeFromReferenceExpression = RE extends string ? SelectType> : RE extends SelectQueryBuilderExpression ? O[keyof O] | null : RE extends (qb: any) => SelectQueryBuilderExpression ? O[keyof O] | null : RE extends Expression ? O : RE extends (qb: any) => Expression ? O : DV; ++export type ExtractTypeFromReferenceExpression = SelectType>; ++export type ExtractRawTypeFromReferenceExpression = RE extends string ? ExtractTypeFromStringReference : RE extends SelectQueryBuilderExpression ? O[keyof O] | null : RE extends (qb: any) => SelectQueryBuilderExpression ? O[keyof O] | null : RE extends Expression ? O : RE extends (qb: any) => Expression ? O : DV; + export type ExtractTypeFromStringReference = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends AnyColumn ? ExtractColumnType : DV; + export type OrderedColumnName = C extends `${string} ${infer O}` ? O extends OrderByDirection ? C : never : C; + export type ExtractColumnNameFromOrderedColumnName = C extends `${infer CL} ${infer O}` ? O extends OrderByDirection ? CL : never : C; +diff --git a/node_modules/kysely/dist/cjs/parser/returning-parser.d.ts b/node_modules/kysely/dist/cjs/parser/returning-parser.d.ts +index 4a41b30..35ccad7 100644 +--- a/node_modules/kysely/dist/cjs/parser/returning-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/returning-parser.d.ts +@@ -1,7 +1,7 @@ +-import { DeleteResult } from '../query-builder/delete-result.js'; +-import { InsertResult } from '../query-builder/insert-result.js'; +-import { UpdateResult } from '../query-builder/update-result.js'; +-import { Selection, AllSelection, CallbackSelection } from './select-parser.js'; ++import { DeleteResult } from 'kysely/dist/cjs/query-builder/delete-result.js'; ++import { InsertResult } from 'kysely/dist/cjs/query-builder/insert-result.js'; ++import { UpdateResult } from 'kysely/dist/cjs/query-builder/update-result.js'; ++import { Selection, AllSelection, CallbackSelection } from 'kysely/dist/cjs/parser/select-parser.js'; + export type ReturningRow = O extends InsertResult ? Selection : O extends DeleteResult ? Selection : O extends UpdateResult ? Selection : O & Selection; + export type ReturningCallbackRow = O extends InsertResult ? CallbackSelection : O extends DeleteResult ? CallbackSelection : O extends UpdateResult ? CallbackSelection : O & CallbackSelection; + export type ReturningAllRow = O extends InsertResult ? AllSelection : O extends DeleteResult ? AllSelection : O extends UpdateResult ? AllSelection : O & AllSelection; +diff --git a/node_modules/kysely/dist/cjs/parser/select-parser.d.ts b/node_modules/kysely/dist/cjs/parser/select-parser.d.ts +index d15c377..be1bcdb 100644 +--- a/node_modules/kysely/dist/cjs/parser/select-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/select-parser.d.ts +@@ -1,11 +1,11 @@ +-import { AliasedSelectQueryBuilder } from '../query-builder/select-query-builder.js'; +-import { SelectionNode } from '../operation-node/selection-node.js'; +-import { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, DrainOuterGeneric, ExtractColumnType } from '../util/type-utils.js'; +-import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js'; +-import { AliasedExpressionOrFactory } from './expression-parser.js'; +-import { SelectType } from '../util/column-type.js'; +-import { AliasedExpression } from '../expression/expression.js'; +-import { ExpressionBuilder } from '../expression/expression-builder.js'; ++import { AliasedSelectQueryBuilder } from 'kysely/dist/cjs/query-builder/select-query-builder.js'; ++import { SelectionNode } from 'kysely/dist/cjs/operation-node/selection-node.js'; ++import { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, DrainOuterGeneric, ExtractColumnType } from 'kysely/dist/cjs/util/type-utils.js'; ++import { DynamicReferenceBuilder } from 'kysely/dist/cjs/dynamic/dynamic-reference-builder.js'; ++import { AliasedExpressionOrFactory } from 'kysely/dist/cjs/parser/expression-parser.js'; ++import { SelectType } from 'kysely/dist/cjs/util/column-type.js'; ++import { AliasedExpression } from 'kysely/dist/cjs/expression/expression.js'; ++import { ExpressionBuilder } from 'kysely/dist/cjs/expression/expression-builder.js'; + export type SelectExpression = AnyAliasedColumnWithTable | AnyAliasedColumn | AnyColumnWithTable | AnyColumn | DynamicReferenceBuilder | AliasedExpressionOrFactory; + export type SelectCallback = (eb: ExpressionBuilder) => ReadonlyArray>; + /** +diff --git a/node_modules/kysely/dist/cjs/parser/set-operation-parser.d.ts b/node_modules/kysely/dist/cjs/parser/set-operation-parser.d.ts +index 34ffc3e..df5c497 100644 +--- a/node_modules/kysely/dist/cjs/parser/set-operation-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/set-operation-parser.d.ts +@@ -1,5 +1,5 @@ +-import { ExpressionBuilder } from '../expression/expression-builder.js'; +-import { Expression } from '../expression/expression.js'; +-import { SetOperator, SetOperationNode } from '../operation-node/set-operation-node.js'; ++import { ExpressionBuilder } from 'kysely/dist/cjs/expression/expression-builder.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { SetOperator, SetOperationNode } from 'kysely/dist/cjs/operation-node/set-operation-node.js'; + export type SetOperandExpression = Expression | ReadonlyArray> | ((eb: ExpressionBuilder) => Expression | ReadonlyArray>); + export declare function parseSetOperations(operator: SetOperator, expression: SetOperandExpression, all: boolean): SetOperationNode[]; +diff --git a/node_modules/kysely/dist/cjs/parser/table-parser.d.ts b/node_modules/kysely/dist/cjs/parser/table-parser.d.ts +index 05b58c4..98c5817 100644 +--- a/node_modules/kysely/dist/cjs/parser/table-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/table-parser.d.ts +@@ -1,9 +1,9 @@ +-import { AliasNode } from '../operation-node/alias-node.js'; +-import { TableNode } from '../operation-node/table-node.js'; +-import { AliasedExpressionOrFactory } from './expression-parser.js'; +-import { OperationNode } from '../operation-node/operation-node.js'; +-import { AliasedExpression } from '../expression/expression.js'; +-import { DrainOuterGeneric, ShallowRecord } from '../util/type-utils.js'; ++import { AliasNode } from 'kysely/dist/cjs/operation-node/alias-node.js'; ++import { TableNode } from 'kysely/dist/cjs/operation-node/table-node.js'; ++import { AliasedExpressionOrFactory } from 'kysely/dist/cjs/parser/expression-parser.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { AliasedExpression } from 'kysely/dist/cjs/expression/expression.js'; ++import { DrainOuterGeneric, ShallowRecord } from 'kysely/dist/cjs/util/type-utils.js'; + export type TableExpression = AnyAliasedTable | AnyTable | AliasedExpressionOrFactory; + export type TableExpressionOrList = TableExpression | ReadonlyArray>; + export type TableReference = AnyAliasedTable | AnyTable | AliasedExpression; +diff --git a/node_modules/kysely/dist/cjs/parser/tuple-parser.d.ts b/node_modules/kysely/dist/cjs/parser/tuple-parser.d.ts +index 032ea46..2101bdf 100644 +--- a/node_modules/kysely/dist/cjs/parser/tuple-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/tuple-parser.d.ts +@@ -1,6 +1,6 @@ +-import { DrainOuterGeneric } from '../util/type-utils.js'; +-import { ExtractTypeFromReferenceExpression } from './reference-parser.js'; +-import { ExtractTypeFromValueExpression } from './value-parser.js'; ++import { DrainOuterGeneric } from 'kysely/dist/cjs/util/type-utils.js'; ++import { ExtractTypeFromReferenceExpression } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { ExtractTypeFromValueExpression } from 'kysely/dist/cjs/parser/value-parser.js'; + export type RefTuple2 = DrainOuterGeneric<[ + ExtractTypeFromReferenceExpression, + ExtractTypeFromReferenceExpression +diff --git a/node_modules/kysely/dist/cjs/parser/update-set-parser.d.ts b/node_modules/kysely/dist/cjs/parser/update-set-parser.d.ts +index d4b2dd0..184e344 100644 +--- a/node_modules/kysely/dist/cjs/parser/update-set-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/update-set-parser.d.ts +@@ -1,10 +1,13 @@ +-import { ColumnUpdateNode } from '../operation-node/column-update-node.js'; +-import { ExpressionBuilder } from '../expression/expression-builder.js'; +-import { UpdateKeys, UpdateType } from '../util/column-type.js'; +-import { ValueExpression } from './value-parser.js'; ++import { ColumnUpdateNode } from 'kysely/dist/cjs/operation-node/column-update-node.js'; ++import { ExpressionBuilder } from 'kysely/dist/cjs/expression/expression-builder.js'; ++import { UpdateKeys, UpdateType } from 'kysely/dist/cjs/util/column-type.js'; ++import { ValueExpression } from 'kysely/dist/cjs/parser/value-parser.js'; ++import { ExtractRawTypeFromReferenceExpression, ReferenceExpression } from 'kysely/dist/cjs/parser/reference-parser.js'; + export type UpdateObject = { + [C in UpdateKeys]?: ValueExpression> | undefined; + }; + export type UpdateObjectFactory = (eb: ExpressionBuilder) => UpdateObject; +-export type UpdateExpression = UpdateObject | UpdateObjectFactory; +-export declare function parseUpdateExpression(update: UpdateExpression): ReadonlyArray; ++export type UpdateObjectExpression = UpdateObject | UpdateObjectFactory; ++export type ExtractUpdateTypeFromReferenceExpression = UpdateType>; ++export declare function parseUpdate(...args: [UpdateObjectExpression] | [ReferenceExpression, ValueExpression]): ReadonlyArray; ++export declare function parseUpdateObjectExpression(update: UpdateObjectExpression): ReadonlyArray; +diff --git a/node_modules/kysely/dist/cjs/parser/update-set-parser.js b/node_modules/kysely/dist/cjs/parser/update-set-parser.js +index bbb1618..e741a9e 100644 +--- a/node_modules/kysely/dist/cjs/parser/update-set-parser.js ++++ b/node_modules/kysely/dist/cjs/parser/update-set-parser.js +@@ -1,12 +1,22 @@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); +-exports.parseUpdateExpression = void 0; ++exports.parseUpdateObjectExpression = exports.parseUpdate = void 0; + const column_node_js_1 = require("../operation-node/column-node.js"); + const column_update_node_js_1 = require("../operation-node/column-update-node.js"); + const expression_builder_js_1 = require("../expression/expression-builder.js"); + const object_utils_js_1 = require("../util/object-utils.js"); + const value_parser_js_1 = require("./value-parser.js"); +-function parseUpdateExpression(update) { ++const reference_parser_js_1 = require("./reference-parser.js"); ++function parseUpdate(...args) { ++ if (args.length === 2) { ++ return [ ++ column_update_node_js_1.ColumnUpdateNode.create((0, reference_parser_js_1.parseReferenceExpression)(args[0]), (0, value_parser_js_1.parseValueExpression)(args[1])), ++ ]; ++ } ++ return parseUpdateObjectExpression(args[0]); ++} ++exports.parseUpdate = parseUpdate; ++function parseUpdateObjectExpression(update) { + const updateObj = (0, object_utils_js_1.isFunction)(update) ? update((0, expression_builder_js_1.expressionBuilder)()) : update; + return Object.entries(updateObj) + .filter(([_, value]) => value !== undefined) +@@ -14,4 +24,4 @@ function parseUpdateExpression(update) { + return column_update_node_js_1.ColumnUpdateNode.create(column_node_js_1.ColumnNode.create(key), (0, value_parser_js_1.parseValueExpression)(value)); + }); + } +-exports.parseUpdateExpression = parseUpdateExpression; ++exports.parseUpdateObjectExpression = parseUpdateObjectExpression; +diff --git a/node_modules/kysely/dist/cjs/parser/value-parser.d.ts b/node_modules/kysely/dist/cjs/parser/value-parser.d.ts +index 353d16e..ce7dc8b 100644 +--- a/node_modules/kysely/dist/cjs/parser/value-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/value-parser.d.ts +@@ -1,8 +1,8 @@ +-import { ValueNode } from '../operation-node/value-node.js'; +-import { ExpressionOrFactory } from './expression-parser.js'; +-import { OperationNode } from '../operation-node/operation-node.js'; +-import { Expression } from '../expression/expression.js'; +-import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js'; ++import { ValueNode } from 'kysely/dist/cjs/operation-node/value-node.js'; ++import { ExpressionOrFactory } from 'kysely/dist/cjs/parser/expression-parser.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { SelectQueryBuilderExpression } from 'kysely/dist/cjs/query-builder/select-query-builder-expression.js'; + export type ValueExpression = V | ExpressionOrFactory; + export type ValueExpressionOrList = ValueExpression | ReadonlyArray>; + export type ExtractTypeFromValueExpressionOrList = VE extends ReadonlyArray ? ExtractTypeFromValueExpression : ExtractTypeFromValueExpression; +diff --git a/node_modules/kysely/dist/cjs/parser/with-parser.d.ts b/node_modules/kysely/dist/cjs/parser/with-parser.d.ts +index 63183fc..d4092ce 100644 +--- a/node_modules/kysely/dist/cjs/parser/with-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/with-parser.d.ts +@@ -1,11 +1,11 @@ +-import { UpdateQueryBuilder } from '../query-builder/update-query-builder.js'; +-import { DeleteQueryBuilder } from '../query-builder/delete-query-builder.js'; +-import { InsertQueryBuilder } from '../query-builder/insert-query-builder.js'; +-import { QueryCreator } from '../query-creator.js'; +-import { Expression } from '../expression/expression.js'; +-import { ShallowRecord } from '../util/type-utils.js'; +-import { CTEBuilderCallback } from '../query-builder/cte-builder.js'; +-import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js'; ++import { UpdateQueryBuilder } from 'kysely/dist/cjs/query-builder/update-query-builder.js'; ++import { DeleteQueryBuilder } from 'kysely/dist/cjs/query-builder/delete-query-builder.js'; ++import { InsertQueryBuilder } from 'kysely/dist/cjs/query-builder/insert-query-builder.js'; ++import { QueryCreator } from 'kysely/dist/cjs/query-creator.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { ShallowRecord } from 'kysely/dist/cjs/util/type-utils.js'; ++import { CTEBuilderCallback } from 'kysely/dist/cjs/query-builder/cte-builder.js'; ++import { CommonTableExpressionNode } from 'kysely/dist/cjs/operation-node/common-table-expression-node.js'; + export type CommonTableExpression = (creator: QueryCreator) => CommonTableExpressionOutput; + export type RecursiveCommonTableExpression = (creator: QueryCreator]: ExtractRowFromCommonTableExpressionName; +diff --git a/node_modules/kysely/dist/cjs/plugin/kysely-plugin.d.ts b/node_modules/kysely/dist/cjs/plugin/kysely-plugin.d.ts +index 098e5c8..35ca9da 100644 +--- a/node_modules/kysely/dist/cjs/plugin/kysely-plugin.d.ts ++++ b/node_modules/kysely/dist/cjs/plugin/kysely-plugin.d.ts +@@ -1,7 +1,7 @@ +-import { QueryResult } from '../driver/database-connection.js'; +-import { RootOperationNode } from '../query-compiler/query-compiler.js'; +-import { QueryId } from '../util/query-id.js'; +-import { UnknownRow } from '../util/type-utils.js'; ++import { QueryResult } from 'kysely/dist/cjs/driver/database-connection.js'; ++import { RootOperationNode } from 'kysely/dist/cjs/query-compiler/query-compiler.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++import { UnknownRow } from 'kysely/dist/cjs/util/type-utils.js'; + export interface KyselyPlugin { + /** + * This is called for each query before it is executed. You can modify the query by +diff --git a/node_modules/kysely/dist/cjs/plugin/with-schema/with-schema-transformer.js b/node_modules/kysely/dist/cjs/plugin/with-schema/with-schema-transformer.js +index 4b3caa6..97287a4 100644 +--- a/node_modules/kysely/dist/cjs/plugin/with-schema/with-schema-transformer.js ++++ b/node_modules/kysely/dist/cjs/plugin/with-schema/with-schema-transformer.js +@@ -19,12 +19,14 @@ const ROOT_OPERATION_NODES = (0, object_utils_js_1.freeze)({ + CreateTableNode: true, + CreateTypeNode: true, + CreateViewNode: true, ++ CreateTriggerNode: true, + DeleteQueryNode: true, + DropIndexNode: true, + DropSchemaNode: true, + DropTableNode: true, + DropTypeNode: true, + DropViewNode: true, ++ DropTriggerNode: true, + InsertQueryNode: true, + RawNode: true, + SelectQueryNode: true, +diff --git a/node_modules/kysely/dist/cjs/query-builder/aggregate-function-builder.d.ts b/node_modules/kysely/dist/cjs/query-builder/aggregate-function-builder.d.ts +index 6f9b8ee..85401ee 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/aggregate-function-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/aggregate-function-builder.d.ts +@@ -1,11 +1,11 @@ +-import { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js'; +-import { AliasNode } from '../operation-node/alias-node.js'; +-import { OverBuilder } from './over-builder.js'; +-import { AliasableExpression, AliasedExpression, Expression } from '../expression/expression.js'; +-import { ReferenceExpression } from '../parser/reference-parser.js'; +-import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js'; +-import { SqlBool } from '../util/type-utils.js'; +-import { ExpressionOrFactory } from '../parser/expression-parser.js'; ++import { AggregateFunctionNode } from 'kysely/dist/cjs/operation-node/aggregate-function-node.js'; ++import { AliasNode } from 'kysely/dist/cjs/operation-node/alias-node.js'; ++import { OverBuilder } from 'kysely/dist/cjs/query-builder/over-builder.js'; ++import { AliasableExpression, AliasedExpression, Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { ReferenceExpression } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { ComparisonOperatorExpression, OperandValueExpressionOrList } from 'kysely/dist/cjs/parser/binary-operation-parser.js'; ++import { SqlBool } from 'kysely/dist/cjs/util/type-utils.js'; ++import { ExpressionOrFactory } from 'kysely/dist/cjs/parser/expression-parser.js'; + export declare class AggregateFunctionBuilder implements AliasableExpression { + #private; + constructor(props: AggregateFunctionBuilderProps); +diff --git a/node_modules/kysely/dist/cjs/query-builder/case-builder.d.ts b/node_modules/kysely/dist/cjs/query-builder/case-builder.d.ts +index bbe83c7..4bc9062 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/case-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/case-builder.d.ts +@@ -1,9 +1,9 @@ +-import { Expression } from '../expression/expression.js'; +-import { ExpressionWrapper } from '../expression/expression-wrapper.js'; +-import { ReferenceExpression } from '../parser/reference-parser.js'; +-import { CaseNode } from '../operation-node/case-node.js'; +-import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js'; +-import { KyselyTypeError } from '../util/type-error.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { ExpressionWrapper } from 'kysely/dist/cjs/expression/expression-wrapper.js'; ++import { ReferenceExpression } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { CaseNode } from 'kysely/dist/cjs/operation-node/case-node.js'; ++import { ComparisonOperatorExpression, OperandValueExpressionOrList } from 'kysely/dist/cjs/parser/binary-operation-parser.js'; ++import { KyselyTypeError } from 'kysely/dist/cjs/util/type-error.js'; + export declare class CaseBuilder implements Whenable { + #private; + constructor(props: CaseBuilderProps); +diff --git a/node_modules/kysely/dist/cjs/query-builder/cte-builder.d.ts b/node_modules/kysely/dist/cjs/query-builder/cte-builder.d.ts +index 8564d5b..ef22570 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/cte-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/cte-builder.d.ts +@@ -1,5 +1,5 @@ +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { CommonTableExpressionNode } from 'kysely/dist/cjs/operation-node/common-table-expression-node.js'; + export declare class CTEBuilder implements OperationNodeSource { + #private; + constructor(props: CTEBuilderProps); +diff --git a/node_modules/kysely/dist/cjs/query-builder/delete-query-builder.d.ts b/node_modules/kysely/dist/cjs/query-builder/delete-query-builder.d.ts +index f510d14..841ec03 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/delete-query-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/delete-query-builder.d.ts +@@ -1,28 +1,28 @@ +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js'; +-import { From, FromTables, TableExpression } from '../parser/table-parser.js'; +-import { SelectExpression, SelectCallback } from '../parser/select-parser.js'; +-import { ReturningAllRow, ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js'; +-import { ReferenceExpression } from '../parser/reference-parser.js'; +-import { QueryNode } from '../operation-node/query-node.js'; +-import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js'; +-import { Compilable } from '../util/compilable.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { QueryId } from '../util/query-id.js'; +-import { KyselyPlugin } from '../plugin/kysely-plugin.js'; +-import { WhereInterface } from './where-interface.js'; +-import { ReturningInterface } from './returning-interface.js'; +-import { NoResultErrorConstructor } from './no-result-error.js'; +-import { DeleteResult } from './delete-result.js'; +-import { DeleteQueryNode } from '../operation-node/delete-query-node.js'; +-import { OrderByDirectionExpression, OrderByExpression } from '../parser/order-by-parser.js'; +-import { Explainable, ExplainFormat } from '../util/explainable.js'; +-import { AliasedExpression, Expression } from '../expression/expression.js'; +-import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js'; +-import { KyselyTypeError } from '../util/type-error.js'; +-import { Streamable } from '../util/streamable.js'; +-import { ExpressionOrFactory } from '../parser/expression-parser.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { JoinCallbackExpression, JoinReferenceExpression } from 'kysely/dist/cjs/parser/join-parser.js'; ++import { From, FromTables, TableExpression } from 'kysely/dist/cjs/parser/table-parser.js'; ++import { SelectExpression, SelectCallback } from 'kysely/dist/cjs/parser/select-parser.js'; ++import { ReturningAllRow, ReturningCallbackRow, ReturningRow } from 'kysely/dist/cjs/parser/returning-parser.js'; ++import { ReferenceExpression } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { QueryNode } from 'kysely/dist/cjs/operation-node/query-node.js'; ++import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from 'kysely/dist/cjs/util/type-utils.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++import { KyselyPlugin } from 'kysely/dist/cjs/plugin/kysely-plugin.js'; ++import { WhereInterface } from 'kysely/dist/cjs/query-builder/where-interface.js'; ++import { ReturningInterface } from 'kysely/dist/cjs/query-builder/returning-interface.js'; ++import { NoResultErrorConstructor } from 'kysely/dist/cjs/query-builder/no-result-error.js'; ++import { DeleteResult } from 'kysely/dist/cjs/query-builder/delete-result.js'; ++import { DeleteQueryNode } from 'kysely/dist/cjs/operation-node/delete-query-node.js'; ++import { OrderByDirectionExpression, OrderByExpression } from 'kysely/dist/cjs/parser/order-by-parser.js'; ++import { Explainable, ExplainFormat } from 'kysely/dist/cjs/util/explainable.js'; ++import { AliasedExpression, Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { ComparisonOperatorExpression, OperandValueExpressionOrList } from 'kysely/dist/cjs/parser/binary-operation-parser.js'; ++import { KyselyTypeError } from 'kysely/dist/cjs/util/type-error.js'; ++import { Streamable } from 'kysely/dist/cjs/util/streamable.js'; ++import { ExpressionOrFactory } from 'kysely/dist/cjs/parser/expression-parser.js'; + export declare class DeleteQueryBuilder implements WhereInterface, ReturningInterface, OperationNodeSource, Compilable, Explainable, Streamable { + #private; + constructor(props: DeleteQueryBuilderProps); +diff --git a/node_modules/kysely/dist/cjs/query-builder/function-module.d.ts b/node_modules/kysely/dist/cjs/query-builder/function-module.d.ts +index 592c5e9..5620351 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/function-module.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/function-module.d.ts +@@ -1,12 +1,13 @@ +-import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js'; +-import { ExpressionWrapper } from '../expression/expression-wrapper.js'; +-import { Expression } from '../expression/expression.js'; +-import { CoalesceReferenceExpressionList } from '../parser/coalesce-parser.js'; +-import { ExtractTypeFromReferenceExpression, ReferenceExpression, StringReference, ExtractTypeFromStringReference } from '../parser/reference-parser.js'; +-import { KyselyTypeError } from '../util/type-error.js'; +-import { Equals, IsAny } from '../util/type-utils.js'; +-import { AggregateFunctionBuilder } from './aggregate-function-builder.js'; +-import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js'; ++import { DynamicReferenceBuilder } from 'kysely/dist/cjs/dynamic/dynamic-reference-builder.js'; ++import { ExpressionWrapper } from 'kysely/dist/cjs/expression/expression-wrapper.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { CoalesceReferenceExpressionList } from 'kysely/dist/cjs/parser/coalesce-parser.js'; ++import { ExtractTypeFromReferenceExpression, ReferenceExpression, StringReference, ExtractTypeFromStringReference } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { KyselyTypeError } from 'kysely/dist/cjs/util/type-error.js'; ++import { Equals, IsAny } from 'kysely/dist/cjs/util/type-utils.js'; ++import { AggregateFunctionBuilder } from 'kysely/dist/cjs/query-builder/aggregate-function-builder.js'; ++import { SelectQueryBuilderExpression } from 'kysely/dist/cjs/query-builder/select-query-builder-expression.js'; ++import { Selectable } from 'kysely/dist/cjs/util/column-type.js'; + /** + * Helpers for type safe SQL function calls. + * +@@ -17,21 +18,47 @@ import { SelectQueryBuilderExpression } from '../query-builder/select-query-buil + * + * + * +- * This example uses the `fn` module to select some aggregates: ++ * This example shows how to create function calls. These examples also work in any ++ * other place (`where` calls, updates, inserts etc.). The only difference is that you ++ * leave out the alias (the `as` call) if you use these in any other place than `select`. + * + * ```ts ++ * import { sql } from 'kysely' ++ * + * const result = await db.selectFrom('person') + * .innerJoin('pet', 'pet.owner_id', 'person.id') +- * .select(({ fn }) => [ ++ * .select(({ fn, val, ref }) => [ + * 'person.id', + * + * // The `fn` module contains the most common + * // functions. + * fn.count('pet.id').as('pet_count'), + * +- * // You can call any function using the +- * // `agg` method +- * fn.agg('array_agg', ['pet.name']).as('pet_names') ++ * // You can call any function by calling `fn` ++ * // directly. The arguments are treated as column ++ * // references by default. If you want to pass in ++ * // values, use the `val` function. ++ * fn('concat', [ ++ * val('Ms. '), ++ * 'first_name', ++ * val(' '), ++ * 'last_name' ++ * ]).as('full_name_with_title'), ++ * ++ * // You can call any aggregate function using the ++ * // `fn.agg` function. ++ * fn.agg('array_agg', ['pet.name']).as('pet_names'), ++ * ++ * // And once again, you can use the `sql` ++ * // template tag. The template tag substitutions ++ * // are treated as values by default. If you want ++ * // to reference columns, you can use the `ref` ++ * // function. ++ * sql`concat( ++ * ${ref('first_name')}, ++ * ' ', ++ * ${ref('last_name')} ++ * )`.as('full_name') + * ]) + * .groupBy('person.id') + * .having((eb) => eb.fn.count('pet.id'), '>', 10) +@@ -44,11 +71,13 @@ import { SelectQueryBuilderExpression } from '../query-builder/select-query-buil + * select + * "person"."id", + * count("pet"."id") as "pet_count", +- * array_agg("pet"."name") as "pet_names" ++ * concat($1, "first_name", $2, "last_name") as "full_name_with_title", ++ * array_agg("pet"."name") as "pet_names", ++ * concat("first_name", ' ', "last_name") as "full_name" + * from "person" + * inner join "pet" on "pet"."owner_id" = "person"."id" + * group by "person"."id" +- * having count("pet"."id") > $1 ++ * having count("pet"."id") > $3 + * ``` + */ + export interface FunctionModule { +@@ -540,6 +569,50 @@ export interface FunctionModule { + any>(expr: RE): Exclude, null> extends ReadonlyArray ? ExpressionWrapper : KyselyTypeError<'any(expr) call failed: expr must be an array'>; + any(subquery: SelectQueryBuilderExpression>): ExpressionWrapper; + any(expr: Expression>): ExpressionWrapper; ++ /** ++ * Creates a json_agg function call. ++ * ++ * This function is only available on PostgreSQL. ++ * ++ * ```ts ++ * db.selectFrom('person') ++ * .innerJoin('pet', 'pet.owner_id', 'person.id') ++ * .select((eb) => ['first_name', eb.fn.jsonAgg('pet').as('pets')]) ++ * .groupBy('person.first_name') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * select "first_name", json_agg("pet") as "pets" ++ * from "person" ++ * inner join "pet" on "pet"."owner_id" = "person"."id" ++ * group by "person"."first_name" ++ * ``` ++ */ ++ jsonAgg>(table: T): AggregateFunctionBuilder[] : T extends Expression ? O[] : never>; ++ /** ++ * Creates a to_json function call. ++ * ++ * This function is only available on PostgreSQL. ++ * ++ * ```ts ++ * db.selectFrom('person') ++ * .innerJoin('pet', 'pet.owner_id', 'person.id') ++ * .select((eb) => ['first_name', eb.fn.toJson('pet').as('pet')]) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * select "first_name", to_json("pet") as "pet" ++ * from "person" ++ * inner join "pet" on "pet"."owner_id" = "person"."id" ++ * ``` ++ */ ++ toJson>(table: T): ExpressionWrapper : T extends Expression ? O : never>; + } + export declare function createFunctionModule(): FunctionModule; + type OutputBoundStringReference, O> = IsAny extends true ? C : Equals | null, O | null> extends true ? C : never; +diff --git a/node_modules/kysely/dist/cjs/query-builder/function-module.js b/node_modules/kysely/dist/cjs/query-builder/function-module.js +index b894b62..01a2a51 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/function-module.js ++++ b/node_modules/kysely/dist/cjs/query-builder/function-module.js +@@ -7,6 +7,8 @@ const function_node_js_1 = require("../operation-node/function-node.js"); + const reference_parser_js_1 = require("../parser/reference-parser.js"); + const select_parser_js_1 = require("../parser/select-parser.js"); + const aggregate_function_builder_js_1 = require("./aggregate-function-builder.js"); ++const object_utils_js_1 = require("../util/object-utils.js"); ++const table_parser_js_1 = require("../parser/table-parser.js"); + function createFunctionModule() { + const fn = (name, args) => { + return new expression_wrapper_js_1.ExpressionWrapper(function_node_js_1.FunctionNode.create(name, (0, reference_parser_js_1.parseReferenceExpressionOrList)(args))); +@@ -44,6 +46,18 @@ function createFunctionModule() { + any(column) { + return fn('any', [column]); + }, ++ jsonAgg(table) { ++ return new aggregate_function_builder_js_1.AggregateFunctionBuilder({ ++ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('json_agg', [ ++ (0, object_utils_js_1.isString)(table) ? (0, table_parser_js_1.parseTable)(table) : table.toOperationNode(), ++ ]), ++ }); ++ }, ++ toJson(table) { ++ return new expression_wrapper_js_1.ExpressionWrapper(function_node_js_1.FunctionNode.create('to_json', [ ++ (0, object_utils_js_1.isString)(table) ? (0, table_parser_js_1.parseTable)(table) : table.toOperationNode(), ++ ])); ++ }, + }); + } + exports.createFunctionModule = createFunctionModule; +diff --git a/node_modules/kysely/dist/cjs/query-builder/having-interface.d.ts b/node_modules/kysely/dist/cjs/query-builder/having-interface.d.ts +index b9f72e1..529d504 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/having-interface.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/having-interface.d.ts +@@ -1,7 +1,7 @@ +-import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js'; +-import { ExpressionOrFactory } from '../parser/expression-parser.js'; +-import { ReferenceExpression } from '../parser/reference-parser.js'; +-import { SqlBool } from '../util/type-utils.js'; ++import { ComparisonOperatorExpression, OperandValueExpressionOrList } from 'kysely/dist/cjs/parser/binary-operation-parser.js'; ++import { ExpressionOrFactory } from 'kysely/dist/cjs/parser/expression-parser.js'; ++import { ReferenceExpression } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { SqlBool } from 'kysely/dist/cjs/util/type-utils.js'; + export interface HavingInterface { + /** + * Just like {@link WhereInterface.where | where} but adds a `having` statement +diff --git a/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.d.ts b/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.d.ts +index 6be4113..f4c749a 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.d.ts +@@ -1,26 +1,26 @@ +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { SelectExpression, SelectCallback } from '../parser/select-parser.js'; +-import { InsertObjectOrList, InsertObjectOrListFactory } from '../parser/insert-values-parser.js'; +-import { InsertQueryNode } from '../operation-node/insert-query-node.js'; +-import { QueryNode } from '../operation-node/query-node.js'; +-import { NarrowPartial, SimplifyResult, SimplifySingleResult } from '../util/type-utils.js'; +-import { UpdateExpression } from '../parser/update-set-parser.js'; +-import { Compilable } from '../util/compilable.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { QueryId } from '../util/query-id.js'; +-import { InsertResult } from './insert-result.js'; +-import { KyselyPlugin } from '../plugin/kysely-plugin.js'; +-import { ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js'; +-import { NoResultErrorConstructor } from './no-result-error.js'; +-import { ExpressionOrFactory } from '../parser/expression-parser.js'; +-import { ReturningInterface } from './returning-interface.js'; +-import { OnConflictBuilder, OnConflictDatabase, OnConflictDoNothingBuilder, OnConflictTables, OnConflictUpdateBuilder } from './on-conflict-builder.js'; +-import { Selectable } from '../util/column-type.js'; +-import { Explainable, ExplainFormat } from '../util/explainable.js'; +-import { Expression } from '../expression/expression.js'; +-import { KyselyTypeError } from '../util/type-error.js'; +-import { Streamable } from '../util/streamable.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { SelectExpression, SelectCallback } from 'kysely/dist/cjs/parser/select-parser.js'; ++import { InsertObjectOrList, InsertObjectOrListFactory } from 'kysely/dist/cjs/parser/insert-values-parser.js'; ++import { InsertQueryNode } from 'kysely/dist/cjs/operation-node/insert-query-node.js'; ++import { QueryNode } from 'kysely/dist/cjs/operation-node/query-node.js'; ++import { NarrowPartial, SimplifyResult, SimplifySingleResult } from 'kysely/dist/cjs/util/type-utils.js'; ++import { UpdateObjectExpression } from 'kysely/dist/cjs/parser/update-set-parser.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++import { InsertResult } from 'kysely/dist/cjs/query-builder/insert-result.js'; ++import { KyselyPlugin } from 'kysely/dist/cjs/plugin/kysely-plugin.js'; ++import { ReturningCallbackRow, ReturningRow } from 'kysely/dist/cjs/parser/returning-parser.js'; ++import { NoResultErrorConstructor } from 'kysely/dist/cjs/query-builder/no-result-error.js'; ++import { ExpressionOrFactory } from 'kysely/dist/cjs/parser/expression-parser.js'; ++import { ReturningInterface } from 'kysely/dist/cjs/query-builder/returning-interface.js'; ++import { OnConflictBuilder, OnConflictDatabase, OnConflictDoNothingBuilder, OnConflictTables, OnConflictUpdateBuilder } from 'kysely/dist/cjs/query-builder/on-conflict-builder.js'; ++import { Selectable } from 'kysely/dist/cjs/util/column-type.js'; ++import { Explainable, ExplainFormat } from 'kysely/dist/cjs/util/explainable.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { KyselyTypeError } from 'kysely/dist/cjs/util/type-error.js'; ++import { Streamable } from 'kysely/dist/cjs/util/streamable.js'; + export declare class InsertQueryBuilder implements ReturningInterface, OperationNodeSource, Compilable, Explainable, Streamable { + #private; + constructor(props: InsertQueryBuilderProps); +@@ -60,13 +60,18 @@ export declare class InsertQueryBuilder implements R + * }) + * .executeTakeFirst() + * ++ * // `insertId` is only available on dialects that ++ * // automatically return the id of the inserted row ++ * // such as MySQL and SQLite. On PostgreSQL, for example, ++ * // you need to add a `returning` clause to the query to ++ * // get anything out. See the "returning data" example. + * console.log(result.insertId) + * ``` + * +- * The generated SQL (PostgreSQL): ++ * The generated SQL (MySQL): + * + * ```sql +- * insert into "person" ("first_name", "last_name", "age") values ($1, $2, $3) ++ * insert into `person` (`first_name`, `last_name`, `age`) values (?, ?, ?) + * ``` + * + * +@@ -131,11 +136,14 @@ export declare class InsertQueryBuilder implements R + * ```ts + * import { sql } from 'kysely' + * ++ * const ani = "Ani" ++ * const ston = "ston" ++ * + * const result = await db + * .insertInto('person') + * .values(({ ref, selectFrom, fn }) => ({ + * first_name: 'Jennifer', +- * last_name: sql`${'Ani'} || ${'ston'}`, ++ * last_name: sql`concat(${ani}, ${ston})`, + * middle_name: ref('first_name'), + * age: selectFrom('person') + * .select(fn.avg('age') +@@ -147,8 +155,18 @@ export declare class InsertQueryBuilder implements R + * The generated SQL (PostgreSQL): + * + * ```sql +- * insert into "person" ("first_name", "last_name", "age") +- * values ($1, $2 || $3, (select avg("age") as "avg_age" from "person")) ++ * insert into "person" ( ++ * "first_name", ++ * "last_name", ++ * "middle_name", ++ * "age" ++ * ) ++ * values ( ++ * $1, ++ * concat($2, $3), ++ * "first_name", ++ * (select avg("age") as "avg_age" from "person") ++ * ) + * ``` + * + * You can also use the callback version of subqueries or raw expressions: +@@ -208,7 +226,7 @@ export declare class InsertQueryBuilder implements R + * .select((eb) => [ + * 'pet.name', + * eb.val('Petson').as('last_name'), +- * eb.val(7).as('age'), ++ * eb.lit(7).as('age'), + * ]) + * ) + * .execute() +@@ -218,7 +236,7 @@ export declare class InsertQueryBuilder implements R + * + * ```sql + * insert into "person" ("first_name", "last_name", "age") +- * select "pet"."name", $1 as "first_name", $2 as "last_name" from "pet" ++ * select "pet"."name", $1 as "last_name", 7 as "age from "pet" + * ``` + */ + expression(expression: ExpressionOrFactory): InsertQueryBuilder; +@@ -414,7 +432,7 @@ export declare class InsertQueryBuilder implements R + * .onDuplicateKeyUpdate({ species: 'hamster' }) + * ``` + */ +- onDuplicateKeyUpdate(update: UpdateExpression): InsertQueryBuilder; ++ onDuplicateKeyUpdate(update: UpdateObjectExpression): InsertQueryBuilder; + /** + * Allows you to return data from modified rows. + * +diff --git a/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.js b/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.js +index ba57ff0..d89d1b8 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.js ++++ b/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.js +@@ -77,7 +77,7 @@ class InsertQueryBuilder { + * .select((eb) => [ + * 'pet.name', + * eb.val('Petson').as('last_name'), +- * eb.val(7).as('age'), ++ * eb.lit(7).as('age'), + * ]) + * ) + * .execute() +@@ -87,7 +87,7 @@ class InsertQueryBuilder { + * + * ```sql + * insert into "person" ("first_name", "last_name", "age") +- * select "pet"."name", $1 as "first_name", $2 as "last_name" from "pet" ++ * select "pet"."name", $1 as "last_name", 7 as "age from "pet" + * ``` + */ + expression(expression) { +@@ -310,7 +310,7 @@ class InsertQueryBuilder { + return new InsertQueryBuilder({ + ...this.#props, + queryNode: insert_query_node_js_1.InsertQueryNode.cloneWith(this.#props.queryNode, { +- onDuplicateKey: on_duplicate_key_node_js_1.OnDuplicateKeyNode.create((0, update_set_parser_js_1.parseUpdateExpression)(update)), ++ onDuplicateKey: on_duplicate_key_node_js_1.OnDuplicateKeyNode.create((0, update_set_parser_js_1.parseUpdateObjectExpression)(update)), + }), + }); + } +diff --git a/node_modules/kysely/dist/cjs/query-builder/insert-result.d.ts b/node_modules/kysely/dist/cjs/query-builder/insert-result.d.ts +index c16fb08..d22a9e5 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/insert-result.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/insert-result.d.ts +@@ -23,7 +23,14 @@ + */ + export declare class InsertResult { + /** +- * The auto incrementing primary key ++ * The auto incrementing primary key of the inserted row. ++ * ++ * This property can be undefined when the query contains an `on conflict` ++ * clause that makes the query succeed even when nothing gets inserted. ++ * ++ * This property is always undefined on dialects like PostgreSQL that ++ * don't return the inserted id by default. On those dialects you need ++ * to use the {@link ReturningInterface.returning | returning} method. + */ + readonly insertId: bigint | undefined; + /** +diff --git a/node_modules/kysely/dist/cjs/query-builder/insert-result.js b/node_modules/kysely/dist/cjs/query-builder/insert-result.js +index 6a3246d..b564a4a 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/insert-result.js ++++ b/node_modules/kysely/dist/cjs/query-builder/insert-result.js +@@ -26,7 +26,14 @@ exports.InsertResult = void 0; + */ + class InsertResult { + /** +- * The auto incrementing primary key ++ * The auto incrementing primary key of the inserted row. ++ * ++ * This property can be undefined when the query contains an `on conflict` ++ * clause that makes the query succeed even when nothing gets inserted. ++ * ++ * This property is always undefined on dialects like PostgreSQL that ++ * don't return the inserted id by default. On those dialects you need ++ * to use the {@link ReturningInterface.returning | returning} method. + */ + insertId; + /** +diff --git a/node_modules/kysely/dist/cjs/query-builder/join-builder.d.ts b/node_modules/kysely/dist/cjs/query-builder/join-builder.d.ts +index 475acb1..06a0488 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/join-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/join-builder.d.ts +@@ -1,9 +1,9 @@ +-import { JoinNode } from '../operation-node/join-node.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js'; +-import { ExpressionOrFactory } from '../parser/expression-parser.js'; +-import { ReferenceExpression } from '../parser/reference-parser.js'; +-import { SqlBool } from '../util/type-utils.js'; ++import { JoinNode } from 'kysely/dist/cjs/operation-node/join-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { ComparisonOperatorExpression, OperandValueExpressionOrList } from 'kysely/dist/cjs/parser/binary-operation-parser.js'; ++import { ExpressionOrFactory } from 'kysely/dist/cjs/parser/expression-parser.js'; ++import { ReferenceExpression } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { SqlBool } from 'kysely/dist/cjs/util/type-utils.js'; + export declare class JoinBuilder implements OperationNodeSource { + #private; + constructor(props: JoinBuilderProps); +diff --git a/node_modules/kysely/dist/cjs/query-builder/json-path-builder.d.ts b/node_modules/kysely/dist/cjs/query-builder/json-path-builder.d.ts +index f173489..93dfff0 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/json-path-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/json-path-builder.d.ts +@@ -1,7 +1,7 @@ +-import { AliasableExpression, AliasedExpression, Expression } from '../expression/expression.js'; +-import { AliasNode } from '../operation-node/alias-node.js'; +-import { JSONReferenceNode } from '../operation-node/json-reference-node.js'; +-import { OperationNode } from '../operation-node/operation-node.js'; ++import { AliasableExpression, AliasedExpression, Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { AliasNode } from 'kysely/dist/cjs/operation-node/alias-node.js'; ++import { JSONReferenceNode } from 'kysely/dist/cjs/operation-node/json-reference-node.js'; ++import { OperationNode } from 'kysely/dist/cjs/operation-node/operation-node.js'; + export declare class JSONPathBuilder { + #private; + constructor(node: JSONReferenceNode); +diff --git a/node_modules/kysely/dist/cjs/query-builder/no-result-error.d.ts b/node_modules/kysely/dist/cjs/query-builder/no-result-error.d.ts +index b6423c2..2ac85ee 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/no-result-error.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/no-result-error.d.ts +@@ -1,4 +1,4 @@ +-import { QueryNode } from '../operation-node/query-node.js'; ++import { QueryNode } from 'kysely/dist/cjs/operation-node/query-node.js'; + export type NoResultErrorConstructor = new (node: QueryNode) => Error; + export declare class NoResultError extends Error { + /** +diff --git a/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.d.ts b/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.d.ts +index 803563e..f1bfe85 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.d.ts +@@ -1,12 +1,12 @@ +-import { Expression } from '../expression/expression.js'; +-import { OnConflictNode } from '../operation-node/on-conflict-node.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js'; +-import { ExpressionOrFactory } from '../parser/expression-parser.js'; +-import { ReferenceExpression } from '../parser/reference-parser.js'; +-import { UpdateExpression } from '../parser/update-set-parser.js'; +-import { AnyColumn, SqlBool } from '../util/type-utils.js'; +-import { WhereInterface } from './where-interface.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { OnConflictNode } from 'kysely/dist/cjs/operation-node/on-conflict-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { ComparisonOperatorExpression, OperandValueExpressionOrList } from 'kysely/dist/cjs/parser/binary-operation-parser.js'; ++import { ExpressionOrFactory } from 'kysely/dist/cjs/parser/expression-parser.js'; ++import { ReferenceExpression } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { UpdateObjectExpression } from 'kysely/dist/cjs/parser/update-set-parser.js'; ++import { AnyColumn, SqlBool } from 'kysely/dist/cjs/util/type-utils.js'; ++import { WhereInterface } from 'kysely/dist/cjs/query-builder/where-interface.js'; + export declare class OnConflictBuilder implements WhereInterface { + #private; + constructor(props: OnConflictBuilderProps); +@@ -435,7 +435,7 @@ export declare class OnConflictBuilder implements Where + * ) + * ``` + */ +- doUpdateSet(update: UpdateExpression, OnConflictTables, OnConflictTables>): OnConflictUpdateBuilder, OnConflictTables>; ++ doUpdateSet(update: UpdateObjectExpression, OnConflictTables, OnConflictTables>): OnConflictUpdateBuilder, OnConflictTables>; + /** + * Simply calls the provided function passing `this` as the only argument. `$call` returns + * what the provided function returns. +diff --git a/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.js b/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.js +index cfb3a0b..b3b7e7e 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.js ++++ b/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.js +@@ -175,7 +175,7 @@ class OnConflictBuilder { + return new OnConflictUpdateBuilder({ + ...this.#props, + onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWith(this.#props.onConflictNode, { +- updates: (0, update_set_parser_js_1.parseUpdateExpression)(update), ++ updates: (0, update_set_parser_js_1.parseUpdateObjectExpression)(update), + }), + }); + } +diff --git a/node_modules/kysely/dist/cjs/query-builder/over-builder.d.ts b/node_modules/kysely/dist/cjs/query-builder/over-builder.d.ts +index 8517b91..1564fc1 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/over-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/over-builder.d.ts +@@ -1,9 +1,9 @@ +-import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { OverNode } from '../operation-node/over-node.js'; +-import { OrderByDirectionExpression } from '../parser/order-by-parser.js'; +-import { PartitionByExpression } from '../parser/partition-by-parser.js'; +-import { StringReference } from '../parser/reference-parser.js'; ++import { DynamicReferenceBuilder } from 'kysely/dist/cjs/dynamic/dynamic-reference-builder.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { OverNode } from 'kysely/dist/cjs/operation-node/over-node.js'; ++import { OrderByDirectionExpression } from 'kysely/dist/cjs/parser/order-by-parser.js'; ++import { PartitionByExpression } from 'kysely/dist/cjs/parser/partition-by-parser.js'; ++import { StringReference } from 'kysely/dist/cjs/parser/reference-parser.js'; + export declare class OverBuilder implements OperationNodeSource { + #private; + constructor(props: OverBuilderProps); +diff --git a/node_modules/kysely/dist/cjs/query-builder/returning-interface.d.ts b/node_modules/kysely/dist/cjs/query-builder/returning-interface.d.ts +index 6c10c86..fb1bd5c 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/returning-interface.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/returning-interface.d.ts +@@ -1,6 +1,6 @@ +-import { ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js'; +-import { SelectCallback, SelectExpression } from '../parser/select-parser.js'; +-import { Selectable } from '../util/column-type.js'; ++import { ReturningCallbackRow, ReturningRow } from 'kysely/dist/cjs/parser/returning-parser.js'; ++import { SelectCallback, SelectExpression } from 'kysely/dist/cjs/parser/select-parser.js'; ++import { Selectable } from 'kysely/dist/cjs/util/column-type.js'; + export interface ReturningInterface { + /** + * Allows you to return data from modified rows. +diff --git a/node_modules/kysely/dist/cjs/query-builder/select-query-builder-expression.d.ts b/node_modules/kysely/dist/cjs/query-builder/select-query-builder-expression.d.ts +index 3593f25..42c4c56 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/select-query-builder-expression.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/select-query-builder-expression.d.ts +@@ -1,5 +1,5 @@ +-import { AliasableExpression } from '../expression/expression.js'; +-import { SelectQueryNode } from '../operation-node/select-query-node.js'; ++import { AliasableExpression } from 'kysely/dist/cjs/expression/expression.js'; ++import { SelectQueryNode } from 'kysely/dist/cjs/operation-node/select-query-node.js'; + export interface SelectQueryBuilderExpression extends AliasableExpression { + get isSelectQueryBuilder(): true; + /** +diff --git a/node_modules/kysely/dist/cjs/query-builder/select-query-builder.d.ts b/node_modules/kysely/dist/cjs/query-builder/select-query-builder.d.ts +index b26ebf1..8221028 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/select-query-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/select-query-builder.d.ts +@@ -1,30 +1,30 @@ +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js'; +-import { TableExpression } from '../parser/table-parser.js'; +-import { SelectExpression, Selection, AllSelection, SelectCallback, CallbackSelection } from '../parser/select-parser.js'; +-import { ReferenceExpression } from '../parser/reference-parser.js'; +-import { SelectQueryNode } from '../operation-node/select-query-node.js'; +-import { QueryNode } from '../operation-node/query-node.js'; +-import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, Simplify, SimplifySingleResult, SqlBool } from '../util/type-utils.js'; +-import { OrderByDirectionExpression, OrderByExpression, DirectedOrderByStringReference, UndirectedOrderByExpression } from '../parser/order-by-parser.js'; +-import { Compilable } from '../util/compilable.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { QueryId } from '../util/query-id.js'; +-import { GroupByArg } from '../parser/group-by-parser.js'; +-import { KyselyPlugin } from '../plugin/kysely-plugin.js'; +-import { WhereInterface } from './where-interface.js'; +-import { NoResultErrorConstructor } from './no-result-error.js'; +-import { HavingInterface } from './having-interface.js'; +-import { Explainable, ExplainFormat } from '../util/explainable.js'; +-import { SetOperandExpression } from '../parser/set-operation-parser.js'; +-import { AliasedExpression, Expression } from '../expression/expression.js'; +-import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js'; +-import { KyselyTypeError } from '../util/type-error.js'; +-import { Selectable } from '../util/column-type.js'; +-import { Streamable } from '../util/streamable.js'; +-import { ExpressionOrFactory } from '../parser/expression-parser.js'; +-import { ExpressionWrapper } from '../expression/expression-wrapper.js'; +-import { SelectQueryBuilderExpression } from './select-query-builder-expression.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { JoinCallbackExpression, JoinReferenceExpression } from 'kysely/dist/cjs/parser/join-parser.js'; ++import { TableExpression } from 'kysely/dist/cjs/parser/table-parser.js'; ++import { SelectExpression, Selection, AllSelection, SelectCallback, CallbackSelection } from 'kysely/dist/cjs/parser/select-parser.js'; ++import { ReferenceExpression } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { SelectQueryNode } from 'kysely/dist/cjs/operation-node/select-query-node.js'; ++import { QueryNode } from 'kysely/dist/cjs/operation-node/query-node.js'; ++import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, Simplify, SimplifySingleResult, SqlBool } from 'kysely/dist/cjs/util/type-utils.js'; ++import { OrderByDirectionExpression, OrderByExpression, DirectedOrderByStringReference, UndirectedOrderByExpression } from 'kysely/dist/cjs/parser/order-by-parser.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++import { GroupByArg } from 'kysely/dist/cjs/parser/group-by-parser.js'; ++import { KyselyPlugin } from 'kysely/dist/cjs/plugin/kysely-plugin.js'; ++import { WhereInterface } from 'kysely/dist/cjs/query-builder/where-interface.js'; ++import { NoResultErrorConstructor } from 'kysely/dist/cjs/query-builder/no-result-error.js'; ++import { HavingInterface } from 'kysely/dist/cjs/query-builder/having-interface.js'; ++import { Explainable, ExplainFormat } from 'kysely/dist/cjs/util/explainable.js'; ++import { SetOperandExpression } from 'kysely/dist/cjs/parser/set-operation-parser.js'; ++import { AliasedExpression, Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { ComparisonOperatorExpression, OperandValueExpressionOrList } from 'kysely/dist/cjs/parser/binary-operation-parser.js'; ++import { KyselyTypeError } from 'kysely/dist/cjs/util/type-error.js'; ++import { Selectable } from 'kysely/dist/cjs/util/column-type.js'; ++import { Streamable } from 'kysely/dist/cjs/util/streamable.js'; ++import { ExpressionOrFactory } from 'kysely/dist/cjs/parser/expression-parser.js'; ++import { ExpressionWrapper } from 'kysely/dist/cjs/expression/expression-wrapper.js'; ++import { SelectQueryBuilderExpression } from 'kysely/dist/cjs/query-builder/select-query-builder-expression.js'; + export interface SelectQueryBuilder extends WhereInterface, HavingInterface, SelectQueryBuilderExpression, Compilable, Explainable, Streamable { + /** + * Adds a `where` expression to the query. +diff --git a/node_modules/kysely/dist/cjs/query-builder/update-query-builder.d.ts b/node_modules/kysely/dist/cjs/query-builder/update-query-builder.d.ts +index 3d30eed..f98f0b3 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/update-query-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/update-query-builder.d.ts +@@ -1,29 +1,30 @@ +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js'; +-import { TableExpression, From, FromTables } from '../parser/table-parser.js'; +-import { SelectExpression, SelectCallback } from '../parser/select-parser.js'; +-import { ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js'; +-import { ReferenceExpression } from '../parser/reference-parser.js'; +-import { QueryNode } from '../operation-node/query-node.js'; +-import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js'; +-import { UpdateQueryNode } from '../operation-node/update-query-node.js'; +-import { UpdateObject, UpdateObjectFactory } from '../parser/update-set-parser.js'; +-import { Compilable } from '../util/compilable.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { QueryId } from '../util/query-id.js'; +-import { UpdateResult } from './update-result.js'; +-import { KyselyPlugin } from '../plugin/kysely-plugin.js'; +-import { WhereInterface } from './where-interface.js'; +-import { ReturningInterface } from './returning-interface.js'; +-import { NoResultErrorConstructor } from './no-result-error.js'; +-import { Selectable } from '../util/column-type.js'; +-import { Explainable, ExplainFormat } from '../util/explainable.js'; +-import { AliasedExpression, Expression } from '../expression/expression.js'; +-import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js'; +-import { KyselyTypeError } from '../util/type-error.js'; +-import { Streamable } from '../util/streamable.js'; +-import { ExpressionOrFactory } from '../parser/expression-parser.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { JoinCallbackExpression, JoinReferenceExpression } from 'kysely/dist/cjs/parser/join-parser.js'; ++import { TableExpression, From, FromTables } from 'kysely/dist/cjs/parser/table-parser.js'; ++import { SelectExpression, SelectCallback } from 'kysely/dist/cjs/parser/select-parser.js'; ++import { ReturningCallbackRow, ReturningRow } from 'kysely/dist/cjs/parser/returning-parser.js'; ++import { ReferenceExpression } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { QueryNode } from 'kysely/dist/cjs/operation-node/query-node.js'; ++import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from 'kysely/dist/cjs/util/type-utils.js'; ++import { UpdateQueryNode } from 'kysely/dist/cjs/operation-node/update-query-node.js'; ++import { UpdateObject, UpdateObjectFactory, ExtractUpdateTypeFromReferenceExpression } from 'kysely/dist/cjs/parser/update-set-parser.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++import { UpdateResult } from 'kysely/dist/cjs/query-builder/update-result.js'; ++import { KyselyPlugin } from 'kysely/dist/cjs/plugin/kysely-plugin.js'; ++import { WhereInterface } from 'kysely/dist/cjs/query-builder/where-interface.js'; ++import { ReturningInterface } from 'kysely/dist/cjs/query-builder/returning-interface.js'; ++import { NoResultErrorConstructor } from 'kysely/dist/cjs/query-builder/no-result-error.js'; ++import { Selectable } from 'kysely/dist/cjs/util/column-type.js'; ++import { Explainable, ExplainFormat } from 'kysely/dist/cjs/util/explainable.js'; ++import { AliasedExpression, Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { ComparisonOperatorExpression, OperandValueExpressionOrList } from 'kysely/dist/cjs/parser/binary-operation-parser.js'; ++import { KyselyTypeError } from 'kysely/dist/cjs/util/type-error.js'; ++import { Streamable } from 'kysely/dist/cjs/util/streamable.js'; ++import { ExpressionOrFactory } from 'kysely/dist/cjs/parser/expression-parser.js'; ++import { ValueExpression } from 'kysely/dist/cjs/parser/value-parser.js'; + export declare class UpdateQueryBuilder implements WhereInterface, ReturningInterface, OperationNodeSource, Compilable, Explainable, Streamable { + #private; + constructor(props: UpdateQueryBuilderProps); +@@ -625,6 +626,20 @@ export declare class UpdateQueryBuilder eb.val('61710)) ++ * .where('id', '=', '1') ++ * .executeTakeFirst() ++ * ``` ++ * + * On PostgreSQL you can chain `returning` to the query to get + * the updated rows' columns (or any other expression) as the + * return value: +@@ -682,6 +697,7 @@ export declare class UpdateQueryBuilder): UpdateQueryBuilder; + set(update: UpdateObjectFactory): UpdateQueryBuilder; ++ set>(key: RE, value: ValueExpression>): UpdateQueryBuilder; + /** + * Allows you to return data from modified rows. + * +diff --git a/node_modules/kysely/dist/cjs/query-builder/update-query-builder.js b/node_modules/kysely/dist/cjs/query-builder/update-query-builder.js +index 1207bfd..6d24d8f 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/update-query-builder.js ++++ b/node_modules/kysely/dist/cjs/query-builder/update-query-builder.js +@@ -65,10 +65,10 @@ class UpdateQueryBuilder { + queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)('FullJoin', args)), + }); + } +- set(update) { ++ set(...args) { + return new UpdateQueryBuilder({ + ...this.#props, +- queryNode: update_query_node_js_1.UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, (0, update_set_parser_js_1.parseUpdateExpression)(update)), ++ queryNode: update_query_node_js_1.UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, (0, update_set_parser_js_1.parseUpdate)(...args)), + }); + } + returning(selection) { +diff --git a/node_modules/kysely/dist/cjs/query-builder/where-interface.d.ts b/node_modules/kysely/dist/cjs/query-builder/where-interface.d.ts +index 9de8d7e..2225ee1 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/where-interface.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/where-interface.d.ts +@@ -1,7 +1,7 @@ +-import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js'; +-import { ReferenceExpression } from '../parser/reference-parser.js'; +-import { SqlBool } from '../util/type-utils.js'; +-import { ExpressionOrFactory } from '../parser/expression-parser.js'; ++import { ComparisonOperatorExpression, OperandValueExpressionOrList } from 'kysely/dist/cjs/parser/binary-operation-parser.js'; ++import { ReferenceExpression } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { SqlBool } from 'kysely/dist/cjs/util/type-utils.js'; ++import { ExpressionOrFactory } from 'kysely/dist/cjs/parser/expression-parser.js'; + export interface WhereInterface { + /** + * Adds a `where` expression to the query. +diff --git a/node_modules/kysely/dist/cjs/query-compiler/compiled-query.d.ts b/node_modules/kysely/dist/cjs/query-compiler/compiled-query.d.ts +index 9635b1f..5c4caec 100644 +--- a/node_modules/kysely/dist/cjs/query-compiler/compiled-query.d.ts ++++ b/node_modules/kysely/dist/cjs/query-compiler/compiled-query.d.ts +@@ -1,4 +1,4 @@ +-import { RootOperationNode } from './query-compiler.js'; ++import { RootOperationNode } from 'kysely/dist/cjs/query-compiler/query-compiler.js'; + export interface CompiledQuery { + readonly query: RootOperationNode; + readonly sql: string; +diff --git a/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.d.ts b/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.d.ts +index dbd954a..2f73125 100644 +--- a/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.d.ts ++++ b/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.d.ts +@@ -48,7 +48,7 @@ import { RootOperationNode, QueryCompiler } from './query-compiler.js'; + import { HavingNode } from '../operation-node/having-node.js'; + import { CreateSchemaNode } from '../operation-node/create-schema-node.js'; + import { DropSchemaNode } from '../operation-node/drop-schema-node.js'; +-import { AlterTableNode } from '../operation-node/alter-table-node.js'; ++import { AlterTableColumnAlterationNode, AlterTableNode } from '../operation-node/alter-table-node.js'; + import { DropColumnNode } from '../operation-node/drop-column-node.js'; + import { RenameColumnNode } from '../operation-node/rename-column-node.js'; + import { AlterColumnNode } from '../operation-node/alter-column-node.js'; +@@ -88,6 +88,11 @@ import { JSONPathNode } from '../operation-node/json-path-node.js'; + import { JSONPathLegNode } from '../operation-node/json-path-leg-node.js'; + import { JSONOperatorChainNode } from '../operation-node/json-operator-chain-node.js'; + import { TupleNode } from '../operation-node/tuple-node.js'; ++import { AddIndexNode } from '../operation-node/add-index-node.js'; ++import { CreateTriggerNode } from '../operation-node/create-trigger-node.js'; ++import { DropTriggerNode } from '../operation-node/drop-trigger-node.js'; ++import { TriggerEventNode } from '../operation-node/trigger-event-node.js'; ++import { TriggerOrderNode } from '../operation-node/trigger-order-node.js'; + export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler { + #private; + protected get numParameters(): number; +@@ -124,6 +129,10 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement + protected visitTable(node: TableNode): void; + protected visitSchemableIdentifier(node: SchemableIdentifierNode): void; + protected visitCreateTable(node: CreateTableNode): void; ++ protected visitCreateTrigger(node: CreateTriggerNode): void; ++ protected visitTriggerEvent(node: TriggerEventNode): void; ++ protected visitTriggerOrder(node: TriggerOrderNode): void; ++ protected visitDropTrigger(node: DropTriggerNode): void; + protected visitColumnDefinition(node: ColumnDefinitionNode): void; + protected getAutoIncrement(): string; + protected visitReferences(node: ReferencesNode): void; +@@ -184,6 +193,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement + protected visitJSONPath(node: JSONPathNode): void; + protected visitJSONPathLeg(node: JSONPathLegNode): void; + protected visitJSONOperatorChain(node: JSONOperatorChainNode): void; ++ protected visitAddIndex(node: AddIndexNode): void; + protected append(str: string): void; + protected appendValue(parameter: unknown): void; + protected getLeftIdentifierWrapper(): string; +@@ -197,4 +207,10 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement + protected addParameter(parameter: unknown): void; + protected appendImmediateValue(value: unknown): void; + protected sortSelectModifiers(arr: SelectModifierNode[]): ReadonlyArray; ++ protected compileColumnAlterations(columnAlterations: readonly AlterTableColumnAlterationNode[]): void; ++ /** ++ * controls whether the dialect adds a "type" keyword before a column's new data ++ * type in an ALTER TABLE statement. ++ */ ++ protected announcesNewColumnDataType(): boolean; + } +diff --git a/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.js b/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.js +index faf80c6..e1c4561 100644 +--- a/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.js ++++ b/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.js +@@ -1,6 +1,7 @@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.DefaultQueryCompiler = void 0; ++const create_table_node_js_1 = require("../operation-node/create-table-node.js"); + const insert_query_node_js_1 = require("../operation-node/insert-query-node.js"); + const operation_node_visitor_js_1 = require("../operation-node/operation-node-visitor.js"); + const operator_node_js_1 = require("../operation-node/operator-node.js"); +@@ -32,6 +33,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + const wrapInParens = this.parentNode !== undefined && + !parens_node_js_1.ParensNode.is(this.parentNode) && + !insert_query_node_js_1.InsertQueryNode.is(this.parentNode) && ++ !create_table_node_js_1.CreateTableNode.is(this.parentNode) && + !create_view_node_js_1.CreateViewNode.is(this.parentNode) && + !set_operation_node_js_1.SetOperationNode.is(this.parentNode); + if (this.parentNode === undefined && node.explain) { +@@ -348,17 +350,83 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + this.append('if not exists '); + } + this.visitNode(node.table); +- this.append(' ('); +- this.compileList([...node.columns, ...(node.constraints ?? [])]); +- this.append(')'); +- if (node.onCommit) { +- this.append(' on commit '); +- this.append(node.onCommit); ++ if (node.selectQuery) { ++ this.append(' as '); ++ this.visitNode(node.selectQuery); + } +- if (node.endModifiers && node.endModifiers.length > 0) { +- this.append(' '); +- this.compileList(node.endModifiers, ' '); ++ else { ++ this.append(' ('); ++ this.compileList([...node.columns, ...(node.constraints ?? [])]); ++ this.append(')'); ++ if (node.onCommit) { ++ this.append(' on commit '); ++ this.append(node.onCommit); ++ } ++ if (node.endModifiers && node.endModifiers.length > 0) { ++ this.append(' '); ++ this.compileList(node.endModifiers, ' '); ++ } ++ } ++ } ++ visitCreateTrigger(node) { ++ if (!node.time) ++ throw new Error('Trigger time is required.'); ++ if (!node.events) ++ throw new Error('Trigger event is required.'); ++ if (!node.table) ++ throw new Error('Trigger table is required.'); ++ this.append('create '); ++ if (node.temporary) { ++ this.append('temporary '); + } ++ if (node.orReplace) { ++ this.append('or replace '); ++ } ++ this.append('trigger '); ++ if (node.ifNotExists) { ++ this.append('if not exists '); ++ } ++ this.visitNode(node.name); ++ this.append(` ${node.time} `); ++ this.compileList(node.events, ' or '); ++ this.append(' on '); ++ this.visitNode(node.table); ++ if (node.forEach) ++ this.append(` for each ${node.forEach} `); ++ if (node.when) { ++ this.append(' when '); ++ this.visitNode(node.when); ++ } ++ if (node.order) ++ this.visitNode(node.order); ++ if (node.queries) { ++ this.append(' begin '); ++ this.compileList(node.queries, '; '); ++ this.append('; '); ++ this.append('end'); ++ } ++ else if (node.function) { ++ this.append(' execute function '); ++ this.visitNode(node.function); ++ } ++ } ++ visitTriggerEvent(node) { ++ this.append(`${node.event} `); ++ if (node.event === 'update' && node.columns) { ++ this.append('of '); ++ this.compileList(node.columns, ', '); ++ } ++ } ++ visitTriggerOrder(node) { ++ this.append(`${node.order} `); ++ this.visitNode(node.otherTriggerName); ++ } ++ visitDropTrigger(node) { ++ this.append('drop trigger '); ++ if (node.ifExists) { ++ this.append('if exists '); ++ } ++ this.visitNode(node.name); + } + visitColumnDefinition(node) { + this.visitNode(node.column); +@@ -385,6 +453,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + if (node.unique) { + this.append(' unique'); + } ++ if (node.nullsNotDistinct) { ++ this.append(' nulls not distinct'); ++ } + if (node.primaryKey) { + this.append(' primary key'); + } +@@ -565,6 +636,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + this.compileList(node.columns); + this.append(')'); + } ++ if (node.nullsNotDistinct) { ++ this.append(' nulls not distinct'); ++ } + if (node.where) { + this.append(' '); + this.visitNode(node.where); +@@ -617,7 +691,11 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + this.visitNode(node.name); + this.append(' '); + } +- this.append('unique ('); ++ this.append('unique'); ++ if (node.nullsNotDistinct) { ++ this.append(' nulls not distinct'); ++ } ++ this.append(' ('); + this.compileList(node.columns); + this.append(')'); + } +@@ -698,7 +776,13 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + this.visitNode(node.dropConstraint); + } + if (node.columnAlterations) { +- this.compileList(node.columnAlterations); ++ this.compileColumnAlterations(node.columnAlterations); ++ } ++ if (node.addIndex) { ++ this.visitNode(node.addIndex); ++ } ++ if (node.dropIndex) { ++ this.visitNode(node.dropIndex); + } + } + visitAddColumn(node) { +@@ -720,7 +804,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + this.visitNode(node.column); + this.append(' '); + if (node.dataType) { +- this.append('type '); ++ if (this.announcesNewColumnDataType()) { ++ this.append('type '); ++ } + this.visitNode(node.dataType); + if (node.dataTypeExpression) { + this.append('using '); +@@ -1006,6 +1092,23 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + this.visitNode(node.values[i]); + } + } ++ visitAddIndex(node) { ++ this.append('add '); ++ if (node.unique) { ++ this.append('unique '); ++ } ++ this.append('index '); ++ this.visitNode(node.name); ++ if (node.columns) { ++ this.append(' ('); ++ this.compileList(node.columns); ++ this.append(')'); ++ } ++ if (node.using) { ++ this.append(' using '); ++ this.visitNode(node.using); ++ } ++ } + append(str) { + this.#sql += str; + } +@@ -1079,6 +1182,16 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + : 1); + return (0, object_utils_js_1.freeze)(arr); + } ++ compileColumnAlterations(columnAlterations) { ++ this.compileList(columnAlterations); ++ } ++ /** ++ * controls whether the dialect adds a "type" keyword before a column's new data ++ * type in an ALTER TABLE statement. ++ */ ++ announcesNewColumnDataType() { ++ return true; ++ } + } + exports.DefaultQueryCompiler = DefaultQueryCompiler; + const SELECT_MODIFIER_SQL = (0, object_utils_js_1.freeze)({ +diff --git a/node_modules/kysely/dist/cjs/query-compiler/query-compiler.d.ts b/node_modules/kysely/dist/cjs/query-compiler/query-compiler.d.ts +index e3a8555..96702eb 100644 +--- a/node_modules/kysely/dist/cjs/query-compiler/query-compiler.d.ts ++++ b/node_modules/kysely/dist/cjs/query-compiler/query-compiler.d.ts +@@ -1,18 +1,20 @@ +-import { AlterTableNode } from '../operation-node/alter-table-node.js'; +-import { CreateIndexNode } from '../operation-node/create-index-node.js'; +-import { CreateSchemaNode } from '../operation-node/create-schema-node.js'; +-import { CreateTableNode } from '../operation-node/create-table-node.js'; +-import { CreateTypeNode } from '../operation-node/create-type-node.js'; +-import { CreateViewNode } from '../operation-node/create-view-node.js'; +-import { DropIndexNode } from '../operation-node/drop-index-node.js'; +-import { DropSchemaNode } from '../operation-node/drop-schema-node.js'; +-import { DropTableNode } from '../operation-node/drop-table-node.js'; +-import { DropTypeNode } from '../operation-node/drop-type-node.js'; +-import { DropViewNode } from '../operation-node/drop-view-node.js'; +-import { QueryNode } from '../operation-node/query-node.js'; +-import { RawNode } from '../operation-node/raw-node.js'; +-import { CompiledQuery } from './compiled-query.js'; +-export type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode | CreateTypeNode | DropTypeNode; ++import { AlterTableNode } from 'kysely/dist/cjs/operation-node/alter-table-node.js'; ++import { CreateIndexNode } from 'kysely/dist/cjs/operation-node/create-index-node.js'; ++import { CreateSchemaNode } from 'kysely/dist/cjs/operation-node/create-schema-node.js'; ++import { CreateTableNode } from 'kysely/dist/cjs/operation-node/create-table-node.js'; ++import { CreateTriggerNode } from 'kysely/dist/cjs/operation-node/create-trigger-node.js'; ++import { CreateTypeNode } from 'kysely/dist/cjs/operation-node/create-type-node.js'; ++import { CreateViewNode } from 'kysely/dist/cjs/operation-node/create-view-node.js'; ++import { DropIndexNode } from 'kysely/dist/cjs/operation-node/drop-index-node.js'; ++import { DropSchemaNode } from 'kysely/dist/cjs/operation-node/drop-schema-node.js'; ++import { DropTableNode } from 'kysely/dist/cjs/operation-node/drop-table-node.js'; ++import { DropTriggerNode } from 'kysely/dist/cjs/operation-node/drop-trigger-node.js'; ++import { DropTypeNode } from 'kysely/dist/cjs/operation-node/drop-type-node.js'; ++import { DropViewNode } from 'kysely/dist/cjs/operation-node/drop-view-node.js'; ++import { QueryNode } from 'kysely/dist/cjs/operation-node/query-node.js'; ++import { RawNode } from 'kysely/dist/cjs/operation-node/raw-node.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++export type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode | CreateTypeNode | DropTypeNode | CreateTriggerNode | DropTriggerNode; + /** + * a `QueryCompiler` compiles a query expressed as a tree of `OperationNodes` into SQL. + */ +diff --git a/node_modules/kysely/dist/cjs/query-creator.d.ts b/node_modules/kysely/dist/cjs/query-creator.d.ts +index 8399ab7..b8262e4 100644 +--- a/node_modules/kysely/dist/cjs/query-creator.d.ts ++++ b/node_modules/kysely/dist/cjs/query-creator.d.ts +@@ -1,17 +1,17 @@ +-import { SelectQueryBuilder } from './query-builder/select-query-builder.js'; +-import { InsertQueryBuilder } from './query-builder/insert-query-builder.js'; +-import { DeleteQueryBuilder } from './query-builder/delete-query-builder.js'; +-import { UpdateQueryBuilder } from './query-builder/update-query-builder.js'; +-import { TableExpression, From, FromTables, TableReference, ExtractTableAlias, AnyAliasedTable, PickTableWithAlias } from './parser/table-parser.js'; +-import { QueryExecutor } from './query-executor/query-executor.js'; +-import { CommonTableExpression, QueryCreatorWithCommonTableExpression, RecursiveCommonTableExpression } from './parser/with-parser.js'; +-import { WithNode } from './operation-node/with-node.js'; +-import { InsertResult } from './query-builder/insert-result.js'; +-import { DeleteResult } from './query-builder/delete-result.js'; +-import { UpdateResult } from './query-builder/update-result.js'; +-import { KyselyPlugin } from './plugin/kysely-plugin.js'; +-import { CTEBuilderCallback } from './query-builder/cte-builder.js'; +-import { CallbackSelection, SelectCallback, SelectExpression, Selection } from './parser/select-parser.js'; ++import { SelectQueryBuilder } from 'kysely/dist/cjs/query-builder/select-query-builder.js'; ++import { InsertQueryBuilder } from 'kysely/dist/cjs/query-builder/insert-query-builder.js'; ++import { DeleteQueryBuilder } from 'kysely/dist/cjs/query-builder/delete-query-builder.js'; ++import { UpdateQueryBuilder } from 'kysely/dist/cjs/query-builder/update-query-builder.js'; ++import { TableExpression, From, FromTables, TableReference, ExtractTableAlias, AnyAliasedTable, PickTableWithAlias } from 'kysely/dist/cjs/parser/table-parser.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { CommonTableExpression, QueryCreatorWithCommonTableExpression, RecursiveCommonTableExpression } from 'kysely/dist/cjs/parser/with-parser.js'; ++import { WithNode } from 'kysely/dist/cjs/operation-node/with-node.js'; ++import { InsertResult } from 'kysely/dist/cjs/query-builder/insert-result.js'; ++import { DeleteResult } from 'kysely/dist/cjs/query-builder/delete-result.js'; ++import { UpdateResult } from 'kysely/dist/cjs/query-builder/update-result.js'; ++import { KyselyPlugin } from 'kysely/dist/cjs/plugin/kysely-plugin.js'; ++import { CTEBuilderCallback } from 'kysely/dist/cjs/query-builder/cte-builder.js'; ++import { CallbackSelection, SelectCallback, SelectExpression, Selection } from 'kysely/dist/cjs/parser/select-parser.js'; + export declare class QueryCreator { + #private; + constructor(props: QueryCreatorProps); +diff --git a/node_modules/kysely/dist/cjs/query-executor/query-executor-provider.d.ts b/node_modules/kysely/dist/cjs/query-executor/query-executor-provider.d.ts +index 9b5ec45..767ca78 100644 +--- a/node_modules/kysely/dist/cjs/query-executor/query-executor-provider.d.ts ++++ b/node_modules/kysely/dist/cjs/query-executor/query-executor-provider.d.ts +@@ -1,4 +1,4 @@ +-import { QueryExecutor } from './query-executor.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; + /** + * @internal + * @private +diff --git a/node_modules/kysely/dist/cjs/query-executor/query-executor.d.ts b/node_modules/kysely/dist/cjs/query-executor/query-executor.d.ts +index 6c57fca..c17e603 100644 +--- a/node_modules/kysely/dist/cjs/query-executor/query-executor.d.ts ++++ b/node_modules/kysely/dist/cjs/query-executor/query-executor.d.ts +@@ -1,10 +1,10 @@ +-import { ConnectionProvider } from '../driver/connection-provider.js'; +-import { QueryResult } from '../driver/database-connection.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { RootOperationNode } from '../query-compiler/query-compiler.js'; +-import { KyselyPlugin } from '../plugin/kysely-plugin.js'; +-import { QueryId } from '../util/query-id.js'; +-import { DialectAdapter } from '../dialect/dialect-adapter.js'; ++import { ConnectionProvider } from 'kysely/dist/cjs/driver/connection-provider.js'; ++import { QueryResult } from 'kysely/dist/cjs/driver/database-connection.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { RootOperationNode } from 'kysely/dist/cjs/query-compiler/query-compiler.js'; ++import { KyselyPlugin } from 'kysely/dist/cjs/plugin/kysely-plugin.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++import { DialectAdapter } from 'kysely/dist/cjs/dialect/dialect-adapter.js'; + /** + * This interface abstracts away the details of how to compile a query into SQL + * and execute it. Instead of passing around all those details, {@link SelectQueryBuilder} +diff --git a/node_modules/kysely/dist/cjs/raw-builder/raw-builder.d.ts b/node_modules/kysely/dist/cjs/raw-builder/raw-builder.d.ts +index 9016b18..c9e130b 100644 +--- a/node_modules/kysely/dist/cjs/raw-builder/raw-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/raw-builder/raw-builder.d.ts +@@ -1,10 +1,10 @@ +-import { QueryResult } from '../driver/database-connection.js'; +-import { RawNode } from '../operation-node/raw-node.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { KyselyPlugin } from '../plugin/kysely-plugin.js'; +-import { QueryExecutorProvider } from '../query-executor/query-executor-provider.js'; +-import { QueryId } from '../util/query-id.js'; +-import { AliasableExpression, AliasedExpression, Expression } from '../expression/expression.js'; ++import { QueryResult } from 'kysely/dist/cjs/driver/database-connection.js'; ++import { RawNode } from 'kysely/dist/cjs/operation-node/raw-node.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { KyselyPlugin } from 'kysely/dist/cjs/plugin/kysely-plugin.js'; ++import { QueryExecutorProvider } from 'kysely/dist/cjs/query-executor/query-executor-provider.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++import { AliasableExpression, AliasedExpression, Expression } from 'kysely/dist/cjs/expression/expression.js'; + /** + * An instance of this class can be used to create raw SQL snippets or queries. + * +diff --git a/node_modules/kysely/dist/cjs/schema/alter-column-builder.d.ts b/node_modules/kysely/dist/cjs/schema/alter-column-builder.d.ts +index 01a5163..f53cd32 100644 +--- a/node_modules/kysely/dist/cjs/schema/alter-column-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/alter-column-builder.d.ts +@@ -1,7 +1,7 @@ +-import { AlterColumnNode } from '../operation-node/alter-column-node.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { DataTypeExpression } from '../parser/data-type-parser.js'; +-import { DefaultValueExpression } from '../parser/default-value-parser.js'; ++import { AlterColumnNode } from 'kysely/dist/cjs/operation-node/alter-column-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { DataTypeExpression } from 'kysely/dist/cjs/parser/data-type-parser.js'; ++import { DefaultValueExpression } from 'kysely/dist/cjs/parser/default-value-parser.js'; + export declare class AlterColumnBuilder { + #private; + constructor(column: string); +diff --git a/node_modules/kysely/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts b/node_modules/kysely/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +index 62afe0f..12e0dcf 100644 +--- a/node_modules/kysely/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +@@ -1,11 +1,11 @@ +-import { AlterTableNode } from '../operation-node/alter-table-node.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { OnModifyForeignAction } from '../operation-node/references-node.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { Compilable } from '../util/compilable.js'; +-import { QueryId } from '../util/query-id.js'; +-import { ForeignKeyConstraintBuilder, ForeignKeyConstraintBuilderInterface } from './foreign-key-constraint-builder.js'; ++import { AlterTableNode } from 'kysely/dist/cjs/operation-node/alter-table-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { OnModifyForeignAction } from 'kysely/dist/cjs/operation-node/references-node.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++import { ForeignKeyConstraintBuilder, ForeignKeyConstraintBuilderInterface } from 'kysely/dist/cjs/schema/foreign-key-constraint-builder.js'; + export declare class AlterTableAddForeignKeyConstraintBuilder implements ForeignKeyConstraintBuilderInterface, OperationNodeSource, Compilable { + #private; + constructor(props: AlterTableAddForeignKeyConstraintBuilderProps); +diff --git a/node_modules/kysely/dist/cjs/schema/alter-table-add-index-builder.d.ts b/node_modules/kysely/dist/cjs/schema/alter-table-add-index-builder.d.ts +new file mode 100644 +index 0000000..7b94e46 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/schema/alter-table-add-index-builder.d.ts +@@ -0,0 +1,104 @@ ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { AlterTableNode } from 'kysely/dist/cjs/operation-node/alter-table-node.js'; ++import { IndexType } from 'kysely/dist/cjs/operation-node/create-index-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { OrderedColumnName } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++export declare class AlterTableAddIndexBuilder implements OperationNodeSource, Compilable { ++ #private; ++ constructor(props: AlterTableAddIndexBuilderProps); ++ /** ++ * Makes the index unique. ++ */ ++ unique(): AlterTableAddIndexBuilder; ++ /** ++ * Adds a column to the index. ++ * ++ * Also see {@link columns} for adding multiple columns at once or {@link expression} ++ * for specifying an arbitrary expression. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * await db.schema ++ * .alterTable('person') ++ * .createIndex('person_first_name_and_age_index') ++ * .column('first_name') ++ * .column('age desc') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc) ++ * ``` ++ */ ++ column(column: OrderedColumnName): AlterTableAddIndexBuilder; ++ /** ++ * Specifies a list of columns for the index. ++ * ++ * Also see {@link column} for adding a single column or {@link expression} for ++ * specifying an arbitrary expression. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * await db.schema ++ * .alterTable('person') ++ * .addIndex('person_first_name_and_age_index') ++ * .columns(['first_name', 'age desc']) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc) ++ * ``` ++ */ ++ columns(columns: OrderedColumnName[]): AlterTableAddIndexBuilder; ++ /** ++ * Specifies an arbitrary expression for the index. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * import { sql } from 'kysely' ++ * ++ * await db.schema ++ * .alterTable('person') ++ * .addIndex('person_first_name_index') ++ * .expression(sql`(first_name < 'Sami')`) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_index` ((first_name < 'Sami')) ++ * ``` ++ */ ++ expression(expression: Expression): AlterTableAddIndexBuilder; ++ /** ++ * Specifies the index type. ++ */ ++ using(indexType: IndexType): AlterTableAddIndexBuilder; ++ using(indexType: string): AlterTableAddIndexBuilder; ++ /** ++ * Simply calls the provided function passing `this` as the only argument. `$call` returns ++ * what the provided function returns. ++ */ ++ $call(func: (qb: this) => T): T; ++ toOperationNode(): AlterTableNode; ++ compile(): CompiledQuery; ++ execute(): Promise; ++} ++export interface AlterTableAddIndexBuilderProps { ++ readonly queryId: QueryId; ++ readonly executor: QueryExecutor; ++ readonly node: AlterTableNode; ++} +diff --git a/node_modules/kysely/dist/cjs/schema/alter-table-add-index-builder.js b/node_modules/kysely/dist/cjs/schema/alter-table-add-index-builder.js +new file mode 100644 +index 0000000..005284b +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/schema/alter-table-add-index-builder.js +@@ -0,0 +1,146 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.AlterTableAddIndexBuilder = void 0; ++const add_index_node_js_1 = require("../operation-node/add-index-node.js"); ++const alter_table_node_js_1 = require("../operation-node/alter-table-node.js"); ++const raw_node_js_1 = require("../operation-node/raw-node.js"); ++const reference_parser_js_1 = require("../parser/reference-parser.js"); ++const object_utils_js_1 = require("../util/object-utils.js"); ++const prevent_await_js_1 = require("../util/prevent-await.js"); ++class AlterTableAddIndexBuilder { ++ #props; ++ constructor(props) { ++ this.#props = (0, object_utils_js_1.freeze)(props); ++ } ++ /** ++ * Makes the index unique. ++ */ ++ unique() { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: add_index_node_js_1.AddIndexNode.cloneWith(this.#props.node.addIndex, { ++ unique: true, ++ }), ++ }), ++ }); ++ } ++ /** ++ * Adds a column to the index. ++ * ++ * Also see {@link columns} for adding multiple columns at once or {@link expression} ++ * for specifying an arbitrary expression. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * await db.schema ++ * .alterTable('person') ++ * .createIndex('person_first_name_and_age_index') ++ * .column('first_name') ++ * .column('age desc') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc) ++ * ``` ++ */ ++ column(column) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: add_index_node_js_1.AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [(0, reference_parser_js_1.parseOrderedColumnName)(column)]), ++ }), ++ }); ++ } ++ /** ++ * Specifies a list of columns for the index. ++ * ++ * Also see {@link column} for adding a single column or {@link expression} for ++ * specifying an arbitrary expression. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * await db.schema ++ * .alterTable('person') ++ * .addIndex('person_first_name_and_age_index') ++ * .columns(['first_name', 'age desc']) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc) ++ * ``` ++ */ ++ columns(columns) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: add_index_node_js_1.AddIndexNode.cloneWithColumns(this.#props.node.addIndex, columns.map(reference_parser_js_1.parseOrderedColumnName)), ++ }), ++ }); ++ } ++ /** ++ * Specifies an arbitrary expression for the index. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * import { sql } from 'kysely' ++ * ++ * await db.schema ++ * .alterTable('person') ++ * .addIndex('person_first_name_index') ++ * .expression(sql`(first_name < 'Sami')`) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_index` ((first_name < 'Sami')) ++ * ``` ++ */ ++ expression(expression) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: add_index_node_js_1.AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [expression.toOperationNode()]), ++ }), ++ }); ++ } ++ using(indexType) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: add_index_node_js_1.AddIndexNode.cloneWith(this.#props.node.addIndex, { ++ using: raw_node_js_1.RawNode.createWithSql(indexType), ++ }), ++ }), ++ }); ++ } ++ /** ++ * Simply calls the provided function passing `this` as the only argument. `$call` returns ++ * what the provided function returns. ++ */ ++ $call(func) { ++ return func(this); ++ } ++ toOperationNode() { ++ return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId); ++ } ++ compile() { ++ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId); ++ } ++ async execute() { ++ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId); ++ } ++} ++exports.AlterTableAddIndexBuilder = AlterTableAddIndexBuilder; ++(0, prevent_await_js_1.preventAwait)(AlterTableAddIndexBuilder, "don't await AlterTableAddIndexBuilder instances directly. To execute the query you need to call `execute`"); +diff --git a/node_modules/kysely/dist/cjs/schema/alter-table-builder.d.ts b/node_modules/kysely/dist/cjs/schema/alter-table-builder.d.ts +index b0726ca..07e7284 100644 +--- a/node_modules/kysely/dist/cjs/schema/alter-table-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/alter-table-builder.d.ts +@@ -1,16 +1,18 @@ +-import { AlterTableNode } from '../operation-node/alter-table-node.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { Compilable } from '../util/compilable.js'; +-import { ColumnDefinitionBuilderCallback } from './column-definition-builder.js'; +-import { QueryId } from '../util/query-id.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { DataTypeExpression } from '../parser/data-type-parser.js'; +-import { Expression } from '../expression/expression.js'; +-import { AlterColumnBuilderCallback } from './alter-column-builder.js'; +-import { AlterTableExecutor } from './alter-table-executor.js'; +-import { AlterTableAddForeignKeyConstraintBuilder } from './alter-table-add-foreign-key-constraint-builder.js'; +-import { AlterTableDropConstraintBuilder } from './alter-table-drop-constraint-builder.js'; ++import { AlterTableNode } from 'kysely/dist/cjs/operation-node/alter-table-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { ColumnDefinitionBuilderCallback } from 'kysely/dist/cjs/schema/column-definition-builder.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { DataTypeExpression } from 'kysely/dist/cjs/parser/data-type-parser.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { AlterColumnBuilderCallback } from 'kysely/dist/cjs/schema/alter-column-builder.js'; ++import { AlterTableExecutor } from 'kysely/dist/cjs/schema/alter-table-executor.js'; ++import { AlterTableAddForeignKeyConstraintBuilder } from 'kysely/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js'; ++import { AlterTableDropConstraintBuilder } from 'kysely/dist/cjs/schema/alter-table-drop-constraint-builder.js'; ++import { AlterTableAddIndexBuilder } from 'kysely/dist/cjs/schema/alter-table-add-index-builder.js'; ++import { UniqueConstraintNodeBuilderCallback } from 'kysely/dist/cjs/schema/unique-constraint-builder.js'; + /** + * This builder can be used to create a `alter table` query. + */ +@@ -35,7 +37,7 @@ export declare class AlterTableBuilder implements ColumnAlteringInterface { + /** + * See {@link CreateTableBuilder.addUniqueConstraint} + */ +- addUniqueConstraint(constraintName: string, columns: string[]): AlterTableExecutor; ++ addUniqueConstraint(constraintName: string, columns: string[], build?: UniqueConstraintNodeBuilderCallback): AlterTableExecutor; + /** + * See {@link CreateTableBuilder.addCheckConstraint} + */ +@@ -53,6 +55,44 @@ export declare class AlterTableBuilder implements ColumnAlteringInterface { + */ + addPrimaryKeyConstraint(constraintName: string, columns: string[]): AlterTableExecutor; + dropConstraint(constraintName: string): AlterTableDropConstraintBuilder; ++ /** ++ * This can be used to add index to table. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.alterTable('person') ++ * .addIndex('person_email_index') ++ * .column('email') ++ * .unique() ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add unique index `person_email_index` (`email`) ++ * ``` ++ */ ++ addIndex(indexName: string): AlterTableAddIndexBuilder; ++ /** ++ * This can be used to drop index from table. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.alterTable('person') ++ * .dropIndex('person_email_index') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` drop index `test_first_name_index` ++ * ``` ++ */ ++ dropIndex(indexName: string): AlterTableExecutor; + /** + * Calls the given function passing `this` as the only argument. + * +diff --git a/node_modules/kysely/dist/cjs/schema/alter-table-builder.js b/node_modules/kysely/dist/cjs/schema/alter-table-builder.js +index a3fb975..0c586d8 100644 +--- a/node_modules/kysely/dist/cjs/schema/alter-table-builder.js ++++ b/node_modules/kysely/dist/cjs/schema/alter-table-builder.js +@@ -25,6 +25,10 @@ const alter_table_executor_js_1 = require("./alter-table-executor.js"); + const alter_table_add_foreign_key_constraint_builder_js_1 = require("./alter-table-add-foreign-key-constraint-builder.js"); + const alter_table_drop_constraint_builder_js_1 = require("./alter-table-drop-constraint-builder.js"); + const primary_constraint_node_js_1 = require("../operation-node/primary-constraint-node.js"); ++const drop_index_node_js_1 = require("../operation-node/drop-index-node.js"); ++const add_index_node_js_1 = require("../operation-node/add-index-node.js"); ++const alter_table_add_index_builder_js_1 = require("./alter-table-add-index-builder.js"); ++const unique_constraint_builder_js_1 = require("./unique-constraint-builder.js"); + /** + * This builder can be used to create a `alter table` query. + */ +@@ -85,11 +89,12 @@ class AlterTableBuilder { + /** + * See {@link CreateTableBuilder.addUniqueConstraint} + */ +- addUniqueConstraint(constraintName, columns) { ++ addUniqueConstraint(constraintName, columns, build = object_utils_js_1.noop) { ++ const uniqueConstraintBuilder = build(new unique_constraint_builder_js_1.UniqueConstraintNodeBuilder(unique_constraint_node_js_1.UniqueConstraintNode.create(columns, constraintName))); + return new alter_table_executor_js_1.AlterTableExecutor({ + ...this.#props, + node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, { +- addConstraint: add_constraint_node_js_1.AddConstraintNode.create(unique_constraint_node_js_1.UniqueConstraintNode.create(columns, constraintName)), ++ addConstraint: add_constraint_node_js_1.AddConstraintNode.create(uniqueConstraintBuilder.toOperationNode()), + }), + }); + } +@@ -136,6 +141,58 @@ class AlterTableBuilder { + }), + }); + } ++ /** ++ * This can be used to add index to table. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.alterTable('person') ++ * .addIndex('person_email_index') ++ * .column('email') ++ * .unique() ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add unique index `person_email_index` (`email`) ++ * ``` ++ */ ++ addIndex(indexName) { ++ return new alter_table_add_index_builder_js_1.AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: add_index_node_js_1.AddIndexNode.create(indexName), ++ }), ++ }); ++ } ++ /** ++ * This can be used to drop index from table. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.alterTable('person') ++ * .dropIndex('person_email_index') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` drop index `test_first_name_index` ++ * ``` ++ */ ++ dropIndex(indexName) { ++ return new alter_table_executor_js_1.AlterTableExecutor({ ++ ...this.#props, ++ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, { ++ dropIndex: drop_index_node_js_1.DropIndexNode.create(indexName), ++ }), ++ }); ++ } + /** + * Calls the given function passing `this` as the only argument. + * +diff --git a/node_modules/kysely/dist/cjs/schema/alter-table-drop-constraint-builder.d.ts b/node_modules/kysely/dist/cjs/schema/alter-table-drop-constraint-builder.d.ts +index 02cad63..6b40efd 100644 +--- a/node_modules/kysely/dist/cjs/schema/alter-table-drop-constraint-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/alter-table-drop-constraint-builder.d.ts +@@ -1,9 +1,9 @@ +-import { AlterTableNode } from '../operation-node/alter-table-node.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { Compilable } from '../util/compilable.js'; +-import { QueryId } from '../util/query-id.js'; ++import { AlterTableNode } from 'kysely/dist/cjs/operation-node/alter-table-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; + export declare class AlterTableDropConstraintBuilder implements OperationNodeSource, Compilable { + #private; + constructor(props: AlterTableDropConstraintBuilderProps); +diff --git a/node_modules/kysely/dist/cjs/schema/alter-table-executor.d.ts b/node_modules/kysely/dist/cjs/schema/alter-table-executor.d.ts +index ca2aef1..6b8d89f 100644 +--- a/node_modules/kysely/dist/cjs/schema/alter-table-executor.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/alter-table-executor.d.ts +@@ -1,9 +1,9 @@ +-import { AlterTableNode } from '../operation-node/alter-table-node.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { Compilable } from '../util/compilable.js'; +-import { QueryId } from '../util/query-id.js'; ++import { AlterTableNode } from 'kysely/dist/cjs/operation-node/alter-table-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; + export declare class AlterTableExecutor implements OperationNodeSource, Compilable { + #private; + constructor(props: AlterTableExecutorProps); +diff --git a/node_modules/kysely/dist/cjs/schema/column-definition-builder.d.ts b/node_modules/kysely/dist/cjs/schema/column-definition-builder.d.ts +index 2a99c4c..9633440 100644 +--- a/node_modules/kysely/dist/cjs/schema/column-definition-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/column-definition-builder.d.ts +@@ -1,8 +1,8 @@ +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { OnModifyForeignAction } from '../operation-node/references-node.js'; +-import { ColumnDefinitionNode } from '../operation-node/column-definition-node.js'; +-import { DefaultValueExpression } from '../parser/default-value-parser.js'; +-import { Expression } from '../expression/expression.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { OnModifyForeignAction } from 'kysely/dist/cjs/operation-node/references-node.js'; ++import { ColumnDefinitionNode } from 'kysely/dist/cjs/operation-node/column-definition-node.js'; ++import { DefaultValueExpression } from 'kysely/dist/cjs/parser/default-value-parser.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; + export declare class ColumnDefinitionBuilder implements OperationNodeSource { + #private; + constructor(node: ColumnDefinitionNode); +@@ -183,6 +183,31 @@ export declare class ColumnDefinitionBuilder implements OperationNodeSource { + * ``` + */ + modifyFront(modifier: Expression): ColumnDefinitionBuilder; ++ /** ++ * Adds `nulls not distinct` specifier. ++ * Should be used with `unique` constraint. ++ * ++ * This only works on some dialects like PostgreSQL. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createTable('person') ++ * .addColumn('id', 'integer', col => col.primaryKey()) ++ * .addColumn('first_name', 'varchar(30)', col => col.unique().nullsNotDistinct()) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create table "person" ( ++ * "id" integer primary key, ++ * "first_name" varchar(30) unique nulls not distinct ++ * ) ++ * ``` ++ */ ++ nullsNotDistinct(): ColumnDefinitionBuilder; + /** + * This can be used to add any additional SQL to the end of the column definition. + * +diff --git a/node_modules/kysely/dist/cjs/schema/column-definition-builder.js b/node_modules/kysely/dist/cjs/schema/column-definition-builder.js +index aebbf98..eef0fcc 100644 +--- a/node_modules/kysely/dist/cjs/schema/column-definition-builder.js ++++ b/node_modules/kysely/dist/cjs/schema/column-definition-builder.js +@@ -258,6 +258,33 @@ class ColumnDefinitionBuilder { + modifyFront(modifier) { + return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWithFrontModifier(this.#node, modifier.toOperationNode())); + } ++ /** ++ * Adds `nulls not distinct` specifier. ++ * Should be used with `unique` constraint. ++ * ++ * This only works on some dialects like PostgreSQL. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createTable('person') ++ * .addColumn('id', 'integer', col => col.primaryKey()) ++ * .addColumn('first_name', 'varchar(30)', col => col.unique().nullsNotDistinct()) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create table "person" ( ++ * "id" integer primary key, ++ * "first_name" varchar(30) unique nulls not distinct ++ * ) ++ * ``` ++ */ ++ nullsNotDistinct() { ++ return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, { nullsNotDistinct: true })); ++ } + /** + * This can be used to add any additional SQL to the end of the column definition. + * +diff --git a/node_modules/kysely/dist/cjs/schema/create-index-builder.d.ts b/node_modules/kysely/dist/cjs/schema/create-index-builder.d.ts +index 27502c4..38bb2cb 100644 +--- a/node_modules/kysely/dist/cjs/schema/create-index-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/create-index-builder.d.ts +@@ -1,14 +1,14 @@ +-import { CreateIndexNode, IndexType } from '../operation-node/create-index-node.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { ExtractColumnNameFromOrderedColumnName, OrderedColumnName } from '../parser/reference-parser.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { Compilable } from '../util/compilable.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { QueryId } from '../util/query-id.js'; +-import { Expression } from '../expression/expression.js'; +-import { ComparisonOperatorExpression } from '../parser/binary-operation-parser.js'; +-import { ExpressionBuilder } from '../expression/expression-builder.js'; +-import { ShallowRecord, SqlBool } from '../util/type-utils.js'; ++import { CreateIndexNode, IndexType } from 'kysely/dist/cjs/operation-node/create-index-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { ExtractColumnNameFromOrderedColumnName, OrderedColumnName } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { ComparisonOperatorExpression } from 'kysely/dist/cjs/parser/binary-operation-parser.js'; ++import { ExpressionBuilder } from 'kysely/dist/cjs/expression/expression-builder.js'; ++import { ShallowRecord, SqlBool } from 'kysely/dist/cjs/util/type-utils.js'; + export declare class CreateIndexBuilder implements OperationNodeSource, Compilable { + #private; + constructor(props: CreateIndexBuilderProps); +@@ -22,6 +22,29 @@ export declare class CreateIndexBuilder implements OperationNodeSourc + * Makes the index unique. + */ + unique(): CreateIndexBuilder; ++ /** ++ * Adds `nulls not distinct` specifier to index. ++ * This only works on some dialects like PostgreSQL. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createIndex('person_first_name_index') ++ * .on('person') ++ * .column('first_name') ++ * .nullsNotDistinct() ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create index "person_first_name_index" ++ * on "test" ("first_name") ++ * nulls not distinct; ++ * ``` ++ */ ++ nullsNotDistinct(): CreateIndexBuilder; + /** + * Specifies the table for the index. + */ +diff --git a/node_modules/kysely/dist/cjs/schema/create-index-builder.js b/node_modules/kysely/dist/cjs/schema/create-index-builder.js +index 4de7de6..e0e00a0 100644 +--- a/node_modules/kysely/dist/cjs/schema/create-index-builder.js ++++ b/node_modules/kysely/dist/cjs/schema/create-index-builder.js +@@ -39,6 +39,36 @@ class CreateIndexBuilder { + }), + }); + } ++ /** ++ * Adds `nulls not distinct` specifier to index. ++ * This only works on some dialects like PostgreSQL. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createIndex('person_first_name_index') ++ * .on('person') ++ * .column('first_name') ++ * .nullsNotDistinct() ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create index "person_first_name_index" ++ * on "test" ("first_name") ++ * nulls not distinct; ++ * ``` ++ */ ++ nullsNotDistinct() { ++ return new CreateIndexBuilder({ ++ ...this.#props, ++ node: create_index_node_js_1.CreateIndexNode.cloneWith(this.#props.node, { ++ nullsNotDistinct: true, ++ }), ++ }); ++ } + /** + * Specifies the table for the index. + */ +diff --git a/node_modules/kysely/dist/cjs/schema/create-schema-builder.d.ts b/node_modules/kysely/dist/cjs/schema/create-schema-builder.d.ts +index 34974f5..fb0068d 100644 +--- a/node_modules/kysely/dist/cjs/schema/create-schema-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/create-schema-builder.d.ts +@@ -1,9 +1,9 @@ +-import { CreateSchemaNode } from '../operation-node/create-schema-node.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { Compilable } from '../util/compilable.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { QueryId } from '../util/query-id.js'; ++import { CreateSchemaNode } from 'kysely/dist/cjs/operation-node/create-schema-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; + export declare class CreateSchemaBuilder implements OperationNodeSource, Compilable { + #private; + constructor(props: CreateSchemaBuilderProps); +diff --git a/node_modules/kysely/dist/cjs/schema/create-table-builder.d.ts b/node_modules/kysely/dist/cjs/schema/create-table-builder.d.ts +index e160575..e5e27e4 100644 +--- a/node_modules/kysely/dist/cjs/schema/create-table-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/create-table-builder.d.ts +@@ -1,13 +1,14 @@ +-import { CreateTableNode, OnCommitAction } from '../operation-node/create-table-node.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { Compilable } from '../util/compilable.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { ColumnDefinitionBuilder } from './column-definition-builder.js'; +-import { QueryId } from '../util/query-id.js'; +-import { ForeignKeyConstraintBuilder } from './foreign-key-constraint-builder.js'; +-import { DataTypeExpression } from '../parser/data-type-parser.js'; +-import { Expression } from '../expression/expression.js'; ++import { CreateTableNode, OnCommitAction } from 'kysely/dist/cjs/operation-node/create-table-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { ColumnDefinitionBuilder } from 'kysely/dist/cjs/schema/column-definition-builder.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++import { ForeignKeyConstraintBuilder } from 'kysely/dist/cjs/schema/foreign-key-constraint-builder.js'; ++import { DataTypeExpression } from 'kysely/dist/cjs/parser/data-type-parser.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; ++import { UniqueConstraintNodeBuilderCallback } from 'kysely/dist/cjs/schema/unique-constraint-builder.js'; + /** + * This builder can be used to create a `create table` query. + */ +@@ -56,7 +57,7 @@ export declare class CreateTableBuilder builder.nullsNotDistinct()) ++ * ``` + */ +- addUniqueConstraint(constraintName: string, columns: C[]): CreateTableBuilder; ++ addUniqueConstraint(constraintName: string, columns: C[], build?: UniqueConstraintNodeBuilderCallback): CreateTableBuilder; + /** + * Adds a check constraint. + * +@@ -205,6 +211,26 @@ export declare class CreateTableBuilder): CreateTableBuilder; ++ /** ++ * Allows to create table from `select` query. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createTable('copy') ++ * .temporary() ++ * .as(db.selectFrom('person').select(['first_name', 'last_name'])) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create temporary table "copy" as ++ * select "first_name", "last_name" from "person" ++ * ``` ++ */ ++ as(expression: Expression): CreateTableBuilder; + /** + * Calls the given function passing `this` as the only argument. + * +diff --git a/node_modules/kysely/dist/cjs/schema/create-table-builder.js b/node_modules/kysely/dist/cjs/schema/create-table-builder.js +index 5053177..73590bf 100644 +--- a/node_modules/kysely/dist/cjs/schema/create-table-builder.js ++++ b/node_modules/kysely/dist/cjs/schema/create-table-builder.js +@@ -15,6 +15,8 @@ const unique_constraint_node_js_1 = require("../operation-node/unique-constraint + const check_constraint_node_js_1 = require("../operation-node/check-constraint-node.js"); + const table_parser_js_1 = require("../parser/table-parser.js"); + const on_commit_action_parse_js_1 = require("../parser/on-commit-action-parse.js"); ++const unique_constraint_builder_js_1 = require("./unique-constraint-builder.js"); ++const expression_parser_js_1 = require("../parser/expression-parser.js"); + /** + * This builder can be used to create a `create table` query. + */ +@@ -86,7 +88,7 @@ class CreateTableBuilder { + * ``` + * + * With this method, it's once again good to remember that Kysely just builds the +- * query and doesn't provide the same API for all databses. For example, some ++ * query and doesn't provide the same API for all databases. For example, some + * databases like older MySQL don't support the `references` statement in the + * column definition. Instead foreign key constraints need to be defined in the + * `create table` query. See the next example: +@@ -145,11 +147,17 @@ class CreateTableBuilder { + * ```ts + * addUniqueConstraint('first_name_last_name_unique', ['first_name', 'last_name']) + * ``` ++ * ++ * In dialects such as PostgreSQL you can specify `nulls not distinct` as follows: ++ * ```ts ++ * addUniqueConstraint('first_name_last_name_unique', ['first_name', 'last_name'], (builder) => builder.nullsNotDistinct()) ++ * ``` + */ +- addUniqueConstraint(constraintName, columns) { ++ addUniqueConstraint(constraintName, columns, build = object_utils_js_1.noop) { ++ const uniqueConstraintBuilder = build(new unique_constraint_builder_js_1.UniqueConstraintNodeBuilder(unique_constraint_node_js_1.UniqueConstraintNode.create(columns, constraintName))); + return new CreateTableBuilder({ + ...this.#props, +- node: create_table_node_js_1.CreateTableNode.cloneWithConstraint(this.#props.node, unique_constraint_node_js_1.UniqueConstraintNode.create(columns, constraintName)), ++ node: create_table_node_js_1.CreateTableNode.cloneWithConstraint(this.#props.node, uniqueConstraintBuilder.toOperationNode()), + }); + } + /** +@@ -272,6 +280,33 @@ class CreateTableBuilder { + node: create_table_node_js_1.CreateTableNode.cloneWithEndModifier(this.#props.node, modifier.toOperationNode()), + }); + } ++ /** ++ * Allows to create table from `select` query. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createTable('copy') ++ * .temporary() ++ * .as(db.selectFrom('person').select(['first_name', 'last_name'])) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create temporary table "copy" as ++ * select "first_name", "last_name" from "person" ++ * ``` ++ */ ++ as(expression) { ++ return new CreateTableBuilder({ ++ ...this.#props, ++ node: create_table_node_js_1.CreateTableNode.cloneWith(this.#props.node, { ++ selectQuery: (0, expression_parser_js_1.parseExpression)(expression), ++ }), ++ }); ++ } + /** + * Calls the given function passing `this` as the only argument. + * +diff --git a/node_modules/kysely/dist/cjs/schema/create-trigger-builder.d.ts b/node_modules/kysely/dist/cjs/schema/create-trigger-builder.d.ts +new file mode 100644 +index 0000000..6106ec7 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/schema/create-trigger-builder.d.ts +@@ -0,0 +1,68 @@ ++import { CreateTriggerNode } from 'kysely/dist/cjs/operation-node/create-trigger-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { ComparisonOperatorExpression, OperandValueExpressionOrList } from 'kysely/dist/cjs/parser/binary-operation-parser.js'; ++import { ReferenceExpression } from 'kysely/dist/cjs/parser/reference-parser.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++import { AnyColumn, AnyColumnWithTable, SqlBool } from 'kysely/dist/cjs/util/type-utils.js'; ++import { TriggerEvent } from 'kysely/dist/cjs/operation-node/trigger-event-node.js'; ++import { ExpressionOrFactory } from 'kysely/dist/cjs/parser/expression-parser.js'; ++import { TriggerQueryCreator } from 'kysely/dist/cjs/trigger-query-creator.js'; ++export type DatabaseWithOldNewTables = DB & { ++ old: DB[TB]; ++ new: DB[TB]; ++}; ++/** ++ * This builder can be used to create a `create table` query. ++ */ ++export declare class CreateTriggerBuilder implements OperationNodeSource, Compilable { ++ #private; ++ constructor(props: CreateTriggerBuilderProps); ++ before(): CreateTriggerBuilder; ++ after(): CreateTriggerBuilder; ++ insteadOf(): CreateTriggerBuilder; ++ addEvent(event: E, columns?: E extends 'update' ? AnyColumn[] : never[]): CreateTriggerBuilder; ++ forEachRow(): CreateTriggerBuilder; ++ forEachStatement(): CreateTriggerBuilder; ++ follows(otherTriggerName: string): CreateTriggerBuilder; ++ precedes(otherTriggerName: string): CreateTriggerBuilder; ++ /** ++ * Specifies the table for the trigger. ++ */ ++ onTable(table: TE, schema?: string): CreateTriggerBuilder; ++ /** ++ * Adds the "temporary" modifier. ++ * ++ * Use this to create a temporary trigger. ++ */ ++ temporary(): CreateTriggerBuilder; ++ /** ++ * Adds the "if not exists" modifier. ++ * ++ * If the trigger already exists, no error is thrown if this method has been called. ++ */ ++ ifNotExists(): CreateTriggerBuilder; ++ /** ++ * Only supported on PostgreSQL ++ */ ++ orReplace(): CreateTriggerBuilder; ++ /** ++ * Adds a query to the trigger. ++ */ ++ addQuery(build: QueryCreatorCallback): CreateTriggerBuilder; ++ function(name: string, args: ReadonlyArray>): CreateTriggerBuilder; ++ when, 'old' | 'new'>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList): CreateTriggerBuilder; ++ when(factory: ExpressionOrFactory, 'old' | 'new', SqlBool>): CreateTriggerBuilder; ++ $call(func: (qb: this) => T): T; ++ toOperationNode(): CreateTriggerNode; ++ compile(): CompiledQuery; ++ execute(): Promise; ++} ++export interface CreateTriggerBuilderProps { ++ readonly queryId: QueryId; ++ readonly executor: QueryExecutor; ++ readonly node: CreateTriggerNode; ++} ++export type QueryCreatorCallback = (creator: TriggerQueryCreator) => OperationNodeSource; +diff --git a/node_modules/kysely/dist/cjs/schema/create-trigger-builder.js b/node_modules/kysely/dist/cjs/schema/create-trigger-builder.js +new file mode 100644 +index 0000000..ebc814c +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/schema/create-trigger-builder.js +@@ -0,0 +1,180 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.CreateTriggerBuilder = void 0; ++const create_trigger_node_js_1 = require("../operation-node/create-trigger-node.js"); ++const query_node_js_1 = require("../operation-node/query-node.js"); ++const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js"); ++const reference_parser_js_1 = require("../parser/reference-parser.js"); ++const immediate_value_transformer_js_1 = require("../plugin/immediate-value/immediate-value-transformer.js"); ++const object_utils_js_1 = require("../util/object-utils.js"); ++const prevent_await_js_1 = require("../util/prevent-await.js"); ++const identifier_node_js_1 = require("../operation-node/identifier-node.js"); ++const trigger_order_node_js_1 = require("../operation-node/trigger-order-node.js"); ++const trigger_event_node_js_1 = require("../operation-node/trigger-event-node.js"); ++const function_node_js_1 = require("../operation-node/function-node.js"); ++const trigger_query_creator_js_1 = require("../trigger-query-creator.js"); ++const table_node_js_1 = require("../operation-node/table-node.js"); ++/** ++ * This builder can be used to create a `create table` query. ++ */ ++class CreateTriggerBuilder { ++ #props; ++ constructor(props) { ++ this.#props = (0, object_utils_js_1.freeze)(props); ++ } ++ before() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ time: 'before', ++ }), ++ }); ++ } ++ after() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ time: 'after', ++ }), ++ }); ++ } ++ insteadOf() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ time: 'instead of', ++ }), ++ }); ++ } ++ addEvent(event, columns) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWithEvent(this.#props.node, trigger_event_node_js_1.TriggerEventNode.create(event, columns?.map(reference_parser_js_1.parseOrderedColumnName))), ++ }); ++ } ++ forEachRow() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ forEach: `row`, ++ }), ++ }); ++ } ++ forEachStatement() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ forEach: `statement`, ++ }), ++ }); ++ } ++ follows(otherTriggerName) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ order: trigger_order_node_js_1.TriggerOrderNode.create('follows', identifier_node_js_1.IdentifierNode.create(otherTriggerName)), ++ }), ++ }); ++ } ++ precedes(otherTriggerName) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ order: trigger_order_node_js_1.TriggerOrderNode.create('precedes', identifier_node_js_1.IdentifierNode.create(otherTriggerName)), ++ }), ++ }); ++ } ++ /** ++ * Specifies the table for the trigger. ++ */ ++ onTable(table, schema) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ table: schema ++ ? table_node_js_1.TableNode.createWithSchema(schema, table) ++ : table_node_js_1.TableNode.create(table), ++ }), ++ }); ++ } ++ /** ++ * Adds the "temporary" modifier. ++ * ++ * Use this to create a temporary trigger. ++ */ ++ temporary() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ temporary: true, ++ }), ++ }); ++ } ++ /** ++ * Adds the "if not exists" modifier. ++ * ++ * If the trigger already exists, no error is thrown if this method has been called. ++ */ ++ ifNotExists() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ ifNotExists: true, ++ }), ++ }); ++ } ++ /** ++ * Only supported on PostgreSQL ++ */ ++ orReplace() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ orReplace: true, ++ }), ++ }); ++ } ++ /** ++ * Adds a query to the trigger. ++ */ ++ addQuery(build) { ++ const node = build(new trigger_query_creator_js_1.TriggerQueryCreator({ executor: this.#props.executor })).toOperationNode(); ++ if (!query_node_js_1.QueryNode.is(node)) ++ throw new Error('Must be a query node.'); ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWithQuery(this.#props.node, node), ++ }); ++ } ++ function(name, args) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ function: function_node_js_1.FunctionNode.create(name, (0, reference_parser_js_1.parseReferenceExpressionOrList)(args)), ++ }), ++ }); ++ } ++ when(...args) { ++ const transformer = new immediate_value_transformer_js_1.ImmediateValueTransformer(); ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ when: transformer.transformNode((0, binary_operation_parser_js_1.parseValueBinaryOperationOrExpression)(args)), ++ }), ++ }); ++ } ++ $call(func) { ++ return func(this); ++ } ++ toOperationNode() { ++ return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId); ++ } ++ compile() { ++ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId); ++ } ++ async execute() { ++ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId); ++ } ++} ++exports.CreateTriggerBuilder = CreateTriggerBuilder; ++(0, prevent_await_js_1.preventAwait)(CreateTriggerBuilder, "don't await CreateTriggerBuilder instances directly. To execute the query you need to call `execute`"); +diff --git a/node_modules/kysely/dist/cjs/schema/create-type-builder.d.ts b/node_modules/kysely/dist/cjs/schema/create-type-builder.d.ts +index 8cc367c..3845c7b 100644 +--- a/node_modules/kysely/dist/cjs/schema/create-type-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/create-type-builder.d.ts +@@ -1,9 +1,9 @@ +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { Compilable } from '../util/compilable.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { QueryId } from '../util/query-id.js'; +-import { CreateTypeNode } from '../operation-node/create-type-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++import { CreateTypeNode } from 'kysely/dist/cjs/operation-node/create-type-node.js'; + export declare class CreateTypeBuilder implements OperationNodeSource, Compilable { + #private; + constructor(props: CreateTypeBuilderProps); +diff --git a/node_modules/kysely/dist/cjs/schema/create-view-builder.d.ts b/node_modules/kysely/dist/cjs/schema/create-view-builder.d.ts +index 6786e99..de6f5cb 100644 +--- a/node_modules/kysely/dist/cjs/schema/create-view-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/create-view-builder.d.ts +@@ -1,11 +1,11 @@ +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { Compilable } from '../util/compilable.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { QueryId } from '../util/query-id.js'; +-import { CreateViewNode } from '../operation-node/create-view-node.js'; +-import { RawBuilder } from '../raw-builder/raw-builder.js'; +-import { SelectQueryBuilder } from '../query-builder/select-query-builder.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++import { CreateViewNode } from 'kysely/dist/cjs/operation-node/create-view-node.js'; ++import { RawBuilder } from 'kysely/dist/cjs/raw-builder/raw-builder.js'; ++import { SelectQueryBuilder } from 'kysely/dist/cjs/query-builder/select-query-builder.js'; + export declare class CreateViewBuilder implements OperationNodeSource, Compilable { + #private; + constructor(props: CreateViewBuilderProps); +diff --git a/node_modules/kysely/dist/cjs/schema/drop-index-builder.d.ts b/node_modules/kysely/dist/cjs/schema/drop-index-builder.d.ts +index 36357d4..20486d3 100644 +--- a/node_modules/kysely/dist/cjs/schema/drop-index-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/drop-index-builder.d.ts +@@ -1,9 +1,9 @@ +-import { DropIndexNode } from '../operation-node/drop-index-node.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { Compilable } from '../util/compilable.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { QueryId } from '../util/query-id.js'; ++import { DropIndexNode } from 'kysely/dist/cjs/operation-node/drop-index-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; + export declare class DropIndexBuilder implements OperationNodeSource, Compilable { + #private; + constructor(props: DropIndexBuilderProps); +diff --git a/node_modules/kysely/dist/cjs/schema/drop-schema-builder.d.ts b/node_modules/kysely/dist/cjs/schema/drop-schema-builder.d.ts +index 052411c..fc46202 100644 +--- a/node_modules/kysely/dist/cjs/schema/drop-schema-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/drop-schema-builder.d.ts +@@ -1,9 +1,9 @@ +-import { DropSchemaNode } from '../operation-node/drop-schema-node.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { Compilable } from '../util/compilable.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { QueryId } from '../util/query-id.js'; ++import { DropSchemaNode } from 'kysely/dist/cjs/operation-node/drop-schema-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; + export declare class DropSchemaBuilder implements OperationNodeSource, Compilable { + #private; + constructor(props: DropSchemaBuilderProps); +diff --git a/node_modules/kysely/dist/cjs/schema/drop-table-builder.d.ts b/node_modules/kysely/dist/cjs/schema/drop-table-builder.d.ts +index 824492a..c9ab11d 100644 +--- a/node_modules/kysely/dist/cjs/schema/drop-table-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/drop-table-builder.d.ts +@@ -1,9 +1,9 @@ +-import { DropTableNode } from '../operation-node/drop-table-node.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { Compilable } from '../util/compilable.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { QueryId } from '../util/query-id.js'; ++import { DropTableNode } from 'kysely/dist/cjs/operation-node/drop-table-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; + export declare class DropTableBuilder implements OperationNodeSource, Compilable { + #private; + constructor(props: DropTableBuilderProps); +diff --git a/node_modules/kysely/dist/cjs/schema/drop-trigger-builder.d.ts b/node_modules/kysely/dist/cjs/schema/drop-trigger-builder.d.ts +new file mode 100644 +index 0000000..8f86888 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/schema/drop-trigger-builder.d.ts +@@ -0,0 +1,25 @@ ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++import { DropTriggerNode } from 'kysely/dist/cjs/operation-node/drop-trigger-node.js'; ++export declare class DropTriggerBuilder implements OperationNodeSource, Compilable { ++ #private; ++ constructor(props: DropTriggerBuilderProps); ++ ifExists(): DropTriggerBuilder; ++ cascade(): DropTriggerBuilder; ++ /** ++ * Simply calls the provided function passing `this` as the only argument. `$call` returns ++ * what the provided function returns. ++ */ ++ $call(func: (qb: this) => T): T; ++ toOperationNode(): DropTriggerNode; ++ compile(): CompiledQuery; ++ execute(): Promise; ++} ++export interface DropTriggerBuilderProps { ++ readonly queryId: QueryId; ++ readonly executor: QueryExecutor; ++ readonly node: DropTriggerNode; ++} +diff --git a/node_modules/kysely/dist/cjs/schema/drop-trigger-builder.js b/node_modules/kysely/dist/cjs/schema/drop-trigger-builder.js +new file mode 100644 +index 0000000..1c55383 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/schema/drop-trigger-builder.js +@@ -0,0 +1,46 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.DropTriggerBuilder = void 0; ++const prevent_await_js_1 = require("../util/prevent-await.js"); ++const object_utils_js_1 = require("../util/object-utils.js"); ++const drop_trigger_node_js_1 = require("../operation-node/drop-trigger-node.js"); ++class DropTriggerBuilder { ++ #props; ++ constructor(props) { ++ this.#props = (0, object_utils_js_1.freeze)(props); ++ } ++ ifExists() { ++ return new DropTriggerBuilder({ ++ ...this.#props, ++ node: drop_trigger_node_js_1.DropTriggerNode.cloneWith(this.#props.node, { ++ ifExists: true, ++ }), ++ }); ++ } ++ cascade() { ++ return new DropTriggerBuilder({ ++ ...this.#props, ++ node: drop_trigger_node_js_1.DropTriggerNode.cloneWith(this.#props.node, { ++ cascade: true, ++ }), ++ }); ++ } ++ /** ++ * Simply calls the provided function passing `this` as the only argument. `$call` returns ++ * what the provided function returns. ++ */ ++ $call(func) { ++ return func(this); ++ } ++ toOperationNode() { ++ return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId); ++ } ++ compile() { ++ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId); ++ } ++ async execute() { ++ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId); ++ } ++} ++exports.DropTriggerBuilder = DropTriggerBuilder; ++(0, prevent_await_js_1.preventAwait)(DropTriggerBuilder, "don't await DropTriggerBuilder instances directly. To execute the query you need to call `execute`"); +diff --git a/node_modules/kysely/dist/cjs/schema/drop-type-builder.d.ts b/node_modules/kysely/dist/cjs/schema/drop-type-builder.d.ts +index 1c93cb5..6fef602 100644 +--- a/node_modules/kysely/dist/cjs/schema/drop-type-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/drop-type-builder.d.ts +@@ -1,9 +1,9 @@ +-import { DropTypeNode } from '../operation-node/drop-type-node.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { Compilable } from '../util/compilable.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { QueryId } from '../util/query-id.js'; ++import { DropTypeNode } from 'kysely/dist/cjs/operation-node/drop-type-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; + export declare class DropTypeBuilder implements OperationNodeSource, Compilable { + #private; + constructor(props: DropTypeBuilderProps); +diff --git a/node_modules/kysely/dist/cjs/schema/drop-view-builder.d.ts b/node_modules/kysely/dist/cjs/schema/drop-view-builder.d.ts +index c16f06c..77b7070 100644 +--- a/node_modules/kysely/dist/cjs/schema/drop-view-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/drop-view-builder.d.ts +@@ -1,9 +1,9 @@ +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { Compilable } from '../util/compilable.js'; +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { QueryId } from '../util/query-id.js'; +-import { DropViewNode } from '../operation-node/drop-view-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { Compilable } from 'kysely/dist/cjs/util/compilable.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { QueryId } from 'kysely/dist/cjs/util/query-id.js'; ++import { DropViewNode } from 'kysely/dist/cjs/operation-node/drop-view-node.js'; + export declare class DropViewBuilder implements OperationNodeSource, Compilable { + #private; + constructor(props: DropViewBuilderProps); +diff --git a/node_modules/kysely/dist/cjs/schema/foreign-key-constraint-builder.d.ts b/node_modules/kysely/dist/cjs/schema/foreign-key-constraint-builder.d.ts +index 1d29ef8..02fb0b4 100644 +--- a/node_modules/kysely/dist/cjs/schema/foreign-key-constraint-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/foreign-key-constraint-builder.d.ts +@@ -1,6 +1,6 @@ +-import { ForeignKeyConstraintNode } from '../operation-node/foreign-key-constraint-node.js'; +-import { OperationNodeSource } from '../operation-node/operation-node-source.js'; +-import { OnModifyForeignAction } from '../operation-node/references-node.js'; ++import { ForeignKeyConstraintNode } from 'kysely/dist/cjs/operation-node/foreign-key-constraint-node.js'; ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { OnModifyForeignAction } from 'kysely/dist/cjs/operation-node/references-node.js'; + export interface ForeignKeyConstraintBuilderInterface { + onDelete(onDelete: OnModifyForeignAction): R; + onUpdate(onUpdate: OnModifyForeignAction): R; +diff --git a/node_modules/kysely/dist/cjs/schema/schema.d.ts b/node_modules/kysely/dist/cjs/schema/schema.d.ts +index 8634b84..52b57cb 100644 +--- a/node_modules/kysely/dist/cjs/schema/schema.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/schema.d.ts +@@ -1,20 +1,22 @@ +-import { QueryExecutor } from '../query-executor/query-executor.js'; +-import { AlterTableBuilder } from './alter-table-builder.js'; +-import { CreateIndexBuilder } from './create-index-builder.js'; +-import { CreateSchemaBuilder } from './create-schema-builder.js'; +-import { CreateTableBuilder } from './create-table-builder.js'; +-import { DropIndexBuilder } from './drop-index-builder.js'; +-import { DropSchemaBuilder } from './drop-schema-builder.js'; +-import { DropTableBuilder } from './drop-table-builder.js'; +-import { CreateViewBuilder } from './create-view-builder.js'; +-import { DropViewBuilder } from './drop-view-builder.js'; +-import { KyselyPlugin } from '../plugin/kysely-plugin.js'; +-import { CreateTypeBuilder } from './create-type-builder.js'; +-import { DropTypeBuilder } from './drop-type-builder.js'; ++import { QueryExecutor } from 'kysely/dist/cjs/query-executor/query-executor.js'; ++import { AlterTableBuilder } from 'kysely/dist/cjs/schema/alter-table-builder.js'; ++import { CreateIndexBuilder } from 'kysely/dist/cjs/schema/create-index-builder.js'; ++import { CreateSchemaBuilder } from 'kysely/dist/cjs/schema/create-schema-builder.js'; ++import { CreateTableBuilder } from 'kysely/dist/cjs/schema/create-table-builder.js'; ++import { DropIndexBuilder } from 'kysely/dist/cjs/schema/drop-index-builder.js'; ++import { DropSchemaBuilder } from 'kysely/dist/cjs/schema/drop-schema-builder.js'; ++import { DropTableBuilder } from 'kysely/dist/cjs/schema/drop-table-builder.js'; ++import { CreateViewBuilder } from 'kysely/dist/cjs/schema/create-view-builder.js'; ++import { DropViewBuilder } from 'kysely/dist/cjs/schema/drop-view-builder.js'; ++import { KyselyPlugin } from 'kysely/dist/cjs/plugin/kysely-plugin.js'; ++import { CreateTypeBuilder } from 'kysely/dist/cjs/schema/create-type-builder.js'; ++import { DropTypeBuilder } from 'kysely/dist/cjs/schema/drop-type-builder.js'; ++import { CreateTriggerBuilder } from 'kysely/dist/cjs/schema/create-trigger-builder.js'; ++import { DropTriggerBuilder } from 'kysely/dist/cjs/schema/drop-trigger-builder.js'; + /** + * Provides methods for building database schema. + */ +-export declare class SchemaModule { ++export declare class SchemaModule { + #private; + constructor(executor: QueryExecutor); + /** +@@ -201,16 +203,18 @@ export declare class SchemaModule { + * ``` + */ + dropType(typeName: string): DropTypeBuilder; ++ createTrigger(name: string): CreateTriggerBuilder; ++ dropTrigger(triggerName: string): DropTriggerBuilder; + /** + * Returns a copy of this schema module with the given plugin installed. + */ +- withPlugin(plugin: KyselyPlugin): SchemaModule; ++ withPlugin(plugin: KyselyPlugin): SchemaModule; + /** + * Returns a copy of this schema module without any plugins. + */ +- withoutPlugins(): SchemaModule; ++ withoutPlugins(): SchemaModule; + /** + * See {@link QueryCreator.withSchema} + */ +- withSchema(schema: string): SchemaModule; ++ withSchema(schema: string): SchemaModule; + } +diff --git a/node_modules/kysely/dist/cjs/schema/schema.js b/node_modules/kysely/dist/cjs/schema/schema.js +index 052622f..7b979ab 100644 +--- a/node_modules/kysely/dist/cjs/schema/schema.js ++++ b/node_modules/kysely/dist/cjs/schema/schema.js +@@ -27,6 +27,11 @@ const drop_type_builder_js_1 = require("./drop-type-builder.js"); + const create_type_node_js_1 = require("../operation-node/create-type-node.js"); + const drop_type_node_js_1 = require("../operation-node/drop-type-node.js"); + const identifier_parser_js_1 = require("../parser/identifier-parser.js"); ++const create_trigger_builder_js_1 = require("./create-trigger-builder.js"); ++const create_trigger_node_js_1 = require("../operation-node/create-trigger-node.js"); ++const identifier_node_js_1 = require("../operation-node/identifier-node.js"); ++const drop_trigger_node_js_1 = require("../operation-node/drop-trigger-node.js"); ++const drop_trigger_builder_js_1 = require("./drop-trigger-builder.js"); + /** + * Provides methods for building database schema. + */ +@@ -285,6 +290,20 @@ class SchemaModule { + node: drop_type_node_js_1.DropTypeNode.create((0, identifier_parser_js_1.parseSchemableIdentifier)(typeName)), + }); + } ++ createTrigger(name) { ++ return new create_trigger_builder_js_1.CreateTriggerBuilder({ ++ queryId: (0, query_id_js_1.createQueryId)(), ++ executor: this.#executor, ++ node: create_trigger_node_js_1.CreateTriggerNode.create(identifier_node_js_1.IdentifierNode.create(name)), ++ }); ++ } ++ dropTrigger(triggerName) { ++ return new drop_trigger_builder_js_1.DropTriggerBuilder({ ++ queryId: (0, query_id_js_1.createQueryId)(), ++ executor: this.#executor, ++ node: drop_trigger_node_js_1.DropTriggerNode.create((0, identifier_parser_js_1.parseSchemableIdentifier)(triggerName)), ++ }); ++ } + /** + * Returns a copy of this schema module with the given plugin installed. + */ +diff --git a/node_modules/kysely/dist/cjs/schema/unique-constraint-builder.d.ts b/node_modules/kysely/dist/cjs/schema/unique-constraint-builder.d.ts +new file mode 100644 +index 0000000..420398a +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/schema/unique-constraint-builder.d.ts +@@ -0,0 +1,14 @@ ++import { OperationNodeSource } from 'kysely/dist/cjs/operation-node/operation-node-source.js'; ++import { UniqueConstraintNode } from 'kysely/dist/cjs/operation-node/unique-constraint-node.js'; ++export declare class UniqueConstraintNodeBuilder implements OperationNodeSource { ++ #private; ++ constructor(node: UniqueConstraintNode); ++ toOperationNode(): UniqueConstraintNode; ++ /** ++ * Adds `nulls not distinct` to the unique constraint definition ++ * ++ * Supported by PostgreSQL dialect only ++ */ ++ nullsNotDistinct(): UniqueConstraintNodeBuilder; ++} ++export type UniqueConstraintNodeBuilderCallback = (builder: UniqueConstraintNodeBuilder) => UniqueConstraintNodeBuilder; +diff --git a/node_modules/kysely/dist/cjs/schema/unique-constraint-builder.js b/node_modules/kysely/dist/cjs/schema/unique-constraint-builder.js +new file mode 100644 +index 0000000..9931354 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/schema/unique-constraint-builder.js +@@ -0,0 +1,24 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.UniqueConstraintNodeBuilder = void 0; ++const unique_constraint_node_js_1 = require("../operation-node/unique-constraint-node.js"); ++const prevent_await_js_1 = require("../util/prevent-await.js"); ++class UniqueConstraintNodeBuilder { ++ #node; ++ constructor(node) { ++ this.#node = node; ++ } ++ toOperationNode() { ++ return this.#node; ++ } ++ /** ++ * Adds `nulls not distinct` to the unique constraint definition ++ * ++ * Supported by PostgreSQL dialect only ++ */ ++ nullsNotDistinct() { ++ return new UniqueConstraintNodeBuilder(unique_constraint_node_js_1.UniqueConstraintNode.cloneWith(this.#node, { nullsNotDistinct: true })); ++ } ++} ++exports.UniqueConstraintNodeBuilder = UniqueConstraintNodeBuilder; ++(0, prevent_await_js_1.preventAwait)(UniqueConstraintNodeBuilder, "don't await UniqueConstraintNodeBuilder instances directly."); +diff --git a/node_modules/kysely/dist/cjs/trigger-query-creator.d.ts b/node_modules/kysely/dist/cjs/trigger-query-creator.d.ts +new file mode 100644 +index 0000000..9b7599f +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/trigger-query-creator.d.ts +@@ -0,0 +1,35 @@ ++import { SelectQueryBuilder } from 'kysely/dist/cjs/query-builder/select-query-builder.js'; ++import { InsertQueryBuilder } from 'kysely/dist/cjs/query-builder/insert-query-builder.js'; ++import { DeleteQueryBuilder } from 'kysely/dist/cjs/query-builder/delete-query-builder.js'; ++import { UpdateQueryBuilder } from 'kysely/dist/cjs/query-builder/update-query-builder.js'; ++import { TableExpression, From, FromTables, TableReference, ExtractTableAlias, AnyAliasedTable, PickTableWithAlias } from 'kysely/dist/cjs/parser/table-parser.js'; ++import { InsertResult } from 'kysely/dist/cjs/query-builder/insert-result.js'; ++import { DeleteResult } from 'kysely/dist/cjs/query-builder/delete-result.js'; ++import { UpdateResult } from 'kysely/dist/cjs/query-builder/update-result.js'; ++import { KyselyPlugin } from 'kysely/dist/cjs/plugin/kysely-plugin.js'; ++import { CallbackSelection, SelectCallback, SelectExpression, Selection } from 'kysely/dist/cjs/parser/select-parser.js'; ++import { QueryCreatorProps } from 'kysely/dist/cjs/query-creator.js'; ++import { DatabaseWithOldNewTables } from 'kysely/dist/cjs/schema/create-trigger-builder.js'; ++export declare class TriggerQueryCreator { ++ #private; ++ constructor(props: QueryCreatorProps); ++ selectFrom(from: TE[]): SelectQueryBuilder, ExtractTableAlias | 'new' | 'old', {}>; ++ selectFrom>(from: TE[]): SelectQueryBuilder, TE>, FromTables | 'new' | 'old', {}>; ++ selectFrom(from: TE): SelectQueryBuilder, ExtractTableAlias | 'new' | 'old', {}>; ++ selectFrom>(from: TE): SelectQueryBuilder & PickTableWithAlias, TE>, ExtractTableAlias | 'new' | 'old', {}>; ++ selectFrom>(from: TE): SelectQueryBuilder, TE>, FromTables | 'new' | 'old', {}>; ++ selectNoFrom>(selections: ReadonlyArray): SelectQueryBuilder>; ++ selectNoFrom>(callback: CB): SelectQueryBuilder>; ++ selectNoFrom>(selection: SE): SelectQueryBuilder>; ++ insertInto(table: T): InsertQueryBuilder; ++ replaceInto(table: T): InsertQueryBuilder; ++ deleteFrom(from: TR[]): DeleteQueryBuilder, ExtractTableAlias | 'new' | 'old', DeleteResult>; ++ deleteFrom>(tables: TR[]): DeleteQueryBuilder, TR>, FromTables | 'new' | 'old', DeleteResult>; ++ deleteFrom(from: TR): DeleteQueryBuilder, ExtractTableAlias | 'new' | 'old', DeleteResult>; ++ deleteFrom>(table: TR): DeleteQueryBuilder, TR>, FromTables | 'new' | 'old', DeleteResult>; ++ updateTable(table: TR): UpdateQueryBuilder, ExtractTableAlias, UpdateResult>; ++ updateTable>(table: TR): UpdateQueryBuilder, ExtractTableAlias, ExtractTableAlias, UpdateResult>; ++ updateTable>(table: TR): UpdateQueryBuilder, FromTables, FromTables, UpdateResult>; ++ withPlugin(plugin: KyselyPlugin): TriggerQueryCreator; ++ withoutPlugins(): TriggerQueryCreator; ++} +diff --git a/node_modules/kysely/dist/cjs/trigger-query-creator.js b/node_modules/kysely/dist/cjs/trigger-query-creator.js +new file mode 100644 +index 0000000..5d4d073 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/trigger-query-creator.js +@@ -0,0 +1,76 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.TriggerQueryCreator = void 0; ++const select_query_builder_js_1 = require("./query-builder/select-query-builder.js"); ++const insert_query_builder_js_1 = require("./query-builder/insert-query-builder.js"); ++const delete_query_builder_js_1 = require("./query-builder/delete-query-builder.js"); ++const update_query_builder_js_1 = require("./query-builder/update-query-builder.js"); ++const delete_query_node_js_1 = require("./operation-node/delete-query-node.js"); ++const insert_query_node_js_1 = require("./operation-node/insert-query-node.js"); ++const select_query_node_js_1 = require("./operation-node/select-query-node.js"); ++const update_query_node_js_1 = require("./operation-node/update-query-node.js"); ++const table_parser_js_1 = require("./parser/table-parser.js"); ++const query_id_js_1 = require("./util/query-id.js"); ++const object_utils_js_1 = require("./util/object-utils.js"); ++const select_parser_js_1 = require("./parser/select-parser.js"); ++class TriggerQueryCreator { ++ #props; ++ constructor(props) { ++ this.#props = (0, object_utils_js_1.freeze)(props); ++ } ++ selectFrom(from) { ++ return (0, select_query_builder_js_1.createSelectQueryBuilder)({ ++ queryId: (0, query_id_js_1.createQueryId)(), ++ executor: this.#props.executor, ++ queryNode: select_query_node_js_1.SelectQueryNode.createFrom((0, table_parser_js_1.parseTableExpressionOrList)(from), this.#props.withNode), ++ }); ++ } ++ selectNoFrom(selection) { ++ return (0, select_query_builder_js_1.createSelectQueryBuilder)({ ++ queryId: (0, query_id_js_1.createQueryId)(), ++ executor: this.#props.executor, ++ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSelections(select_query_node_js_1.SelectQueryNode.create(this.#props.withNode), (0, select_parser_js_1.parseSelectArg)(selection)), ++ }); ++ } ++ insertInto(table) { ++ return new insert_query_builder_js_1.InsertQueryBuilder({ ++ queryId: (0, query_id_js_1.createQueryId)(), ++ executor: this.#props.executor, ++ queryNode: insert_query_node_js_1.InsertQueryNode.create((0, table_parser_js_1.parseTable)(table), this.#props.withNode), ++ }); ++ } ++ replaceInto(table) { ++ return new insert_query_builder_js_1.InsertQueryBuilder({ ++ queryId: (0, query_id_js_1.createQueryId)(), ++ executor: this.#props.executor, ++ queryNode: insert_query_node_js_1.InsertQueryNode.create((0, table_parser_js_1.parseTable)(table), this.#props.withNode, true), ++ }); ++ } ++ deleteFrom(tables) { ++ return new delete_query_builder_js_1.DeleteQueryBuilder({ ++ queryId: (0, query_id_js_1.createQueryId)(), ++ executor: this.#props.executor, ++ queryNode: delete_query_node_js_1.DeleteQueryNode.create((0, table_parser_js_1.parseTableExpressionOrList)(tables), this.#props.withNode), ++ }); ++ } ++ updateTable(table) { ++ return new update_query_builder_js_1.UpdateQueryBuilder({ ++ queryId: (0, query_id_js_1.createQueryId)(), ++ executor: this.#props.executor, ++ queryNode: update_query_node_js_1.UpdateQueryNode.create((0, table_parser_js_1.parseTableExpression)(table), this.#props.withNode), ++ }); ++ } ++ withPlugin(plugin) { ++ return new TriggerQueryCreator({ ++ ...this.#props, ++ executor: this.#props.executor.withPlugin(plugin), ++ }); ++ } ++ withoutPlugins() { ++ return new TriggerQueryCreator({ ++ ...this.#props, ++ executor: this.#props.executor.withoutPlugins(), ++ }); ++ } ++} ++exports.TriggerQueryCreator = TriggerQueryCreator; +diff --git a/node_modules/kysely/dist/cjs/util/column-type.d.ts b/node_modules/kysely/dist/cjs/util/column-type.d.ts +index bb33464..88a26b2 100644 +--- a/node_modules/kysely/dist/cjs/util/column-type.d.ts ++++ b/node_modules/kysely/dist/cjs/util/column-type.d.ts +@@ -1,4 +1,4 @@ +-import { DrainOuterGeneric } from './type-utils.js'; ++import { DrainOuterGeneric } from 'kysely/dist/cjs/util/type-utils.js'; + /** + * This type can be used to specify a different type for + * select, insert and update operations. +diff --git a/node_modules/kysely/dist/cjs/util/compilable.d.ts b/node_modules/kysely/dist/cjs/util/compilable.d.ts +index 638b5d0..5c8f0e9 100644 +--- a/node_modules/kysely/dist/cjs/util/compilable.d.ts ++++ b/node_modules/kysely/dist/cjs/util/compilable.d.ts +@@ -1,4 +1,4 @@ +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; + export interface Compilable { + compile(): CompiledQuery; + } +diff --git a/node_modules/kysely/dist/cjs/util/explainable.d.ts b/node_modules/kysely/dist/cjs/util/explainable.d.ts +index 5e05810..86789f2 100644 +--- a/node_modules/kysely/dist/cjs/util/explainable.d.ts ++++ b/node_modules/kysely/dist/cjs/util/explainable.d.ts +@@ -1,4 +1,4 @@ +-import { Expression } from '../expression/expression.js'; ++import { Expression } from 'kysely/dist/cjs/expression/expression.js'; + export type ExplainFormat = 'text' | 'xml' | 'json' | 'yaml' | 'traditional' | 'tree'; + export interface Explainable { + /** +diff --git a/node_modules/kysely/dist/cjs/util/log.d.ts b/node_modules/kysely/dist/cjs/util/log.d.ts +index 840a172..69c7b55 100644 +--- a/node_modules/kysely/dist/cjs/util/log.d.ts ++++ b/node_modules/kysely/dist/cjs/util/log.d.ts +@@ -1,5 +1,5 @@ +-import { CompiledQuery } from '../query-compiler/compiled-query.js'; +-import { ArrayItemType } from './type-utils.js'; ++import { CompiledQuery } from 'kysely/dist/cjs/query-compiler/compiled-query.js'; ++import { ArrayItemType } from 'kysely/dist/cjs/util/type-utils.js'; + export declare const LOG_LEVELS: readonly ["query", "error"]; + export type LogLevel = ArrayItemType; + export interface QueryLogEvent { +diff --git a/node_modules/kysely/dist/cjs/util/object-utils.d.ts b/node_modules/kysely/dist/cjs/util/object-utils.d.ts +index 1b9f563..c9fa82b 100644 +--- a/node_modules/kysely/dist/cjs/util/object-utils.d.ts ++++ b/node_modules/kysely/dist/cjs/util/object-utils.d.ts +@@ -6,7 +6,7 @@ export declare function isNumber(obj: unknown): obj is number; + export declare function isBoolean(obj: unknown): obj is boolean; + export declare function isNull(obj: unknown): obj is null; + export declare function isDate(obj: unknown): obj is Date; +-export declare function isBigInt(obj: unknown): obj is BigInt; ++export declare function isBigInt(obj: unknown): obj is bigint; + export declare function isBuffer(obj: unknown): obj is { + length: number; + }; +diff --git a/node_modules/kysely/dist/cjs/util/type-utils.d.ts b/node_modules/kysely/dist/cjs/util/type-utils.d.ts +index 5fd42ff..4daf187 100644 +--- a/node_modules/kysely/dist/cjs/util/type-utils.d.ts ++++ b/node_modules/kysely/dist/cjs/util/type-utils.d.ts +@@ -1,7 +1,7 @@ +-import { InsertResult } from '../query-builder/insert-result.js'; +-import { DeleteResult } from '../query-builder/delete-result.js'; +-import { UpdateResult } from '../query-builder/update-result.js'; +-import { KyselyTypeError } from './type-error.js'; ++import { InsertResult } from 'kysely/dist/cjs/query-builder/insert-result.js'; ++import { DeleteResult } from 'kysely/dist/cjs/query-builder/delete-result.js'; ++import { UpdateResult } from 'kysely/dist/cjs/query-builder/update-result.js'; ++import { KyselyTypeError } from 'kysely/dist/cjs/util/type-error.js'; + /** + * Given a database type and a union of table names in that db, returns + * a union type with all possible column names. +diff --git a/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.d.ts b/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.d.ts +index dc87916..e3fb628 100644 +--- a/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.d.ts ++++ b/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.d.ts +@@ -7,6 +7,14 @@ import { DialectAdapter, MigrationLockOptions } from './dialect-adapter.js'; + * they are added and there will be less breaking changes. + */ + export declare abstract class DialectAdapterBase implements DialectAdapter { ++ /** ++ * Whether or not this dialect supports `if not exists` in creation of tables/schemas/views/etc. ++ * ++ * If this is false, Kysely's internal migrations tables and schemas are created ++ * without `if not exists` in migrations. This is not a problem if the dialect ++ * supports transactional DDL. ++ */ ++ get supportsCreateIfNotExists(): boolean; + /** + * Whether or not this dialect supports transactional DDL. + * +diff --git a/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.js b/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.js +index b5f7843..7065ce6 100644 +--- a/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.js ++++ b/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.js +@@ -6,6 +6,9 @@ + * they are added and there will be less breaking changes. + */ + export class DialectAdapterBase { ++ get supportsCreateIfNotExists() { ++ return true; ++ } + get supportsTransactionalDdl() { + return false; + } +diff --git a/node_modules/kysely/dist/esm/dialect/dialect-adapter.d.ts b/node_modules/kysely/dist/esm/dialect/dialect-adapter.d.ts +index 73a925a..fe7f1b3 100644 +--- a/node_modules/kysely/dist/esm/dialect/dialect-adapter.d.ts ++++ b/node_modules/kysely/dist/esm/dialect/dialect-adapter.d.ts +@@ -8,6 +8,14 @@ import { Kysely } from '../kysely.js'; + * it. For that there's a `supportsTransactionalDdl` boolean in this interface. + */ + export interface DialectAdapter { ++ /** ++ * Whether or not this dialect supports `if not exists` in creation of tables/schemas/views/etc. ++ * ++ * If this is false, Kysely's internal migrations tables and schemas are created ++ * without `if not exists` in migrations. This is not a problem if the dialect ++ * supports transactional DDL. ++ */ ++ readonly supportsCreateIfNotExists: boolean; + /** + * Whether or not this dialect supports transactional DDL. + * +diff --git a/node_modules/kysely/dist/esm/dialect/postgres/postgres-driver.js b/node_modules/kysely/dist/esm/dialect/postgres/postgres-driver.js +index c83b381..3bcddb6 100644 +--- a/node_modules/kysely/dist/esm/dialect/postgres/postgres-driver.js ++++ b/node_modules/kysely/dist/esm/dialect/postgres/postgres-driver.js +@@ -26,7 +26,7 @@ export class PostgresDriver { + // The driver must take care of calling `onCreateConnection` when a new + // connection is created. The `pg` module doesn't provide an async hook + // for the connection creation. We need to call the method explicitly. +- if (this.#config?.onCreateConnection) { ++ if (this.#config.onCreateConnection) { + await this.#config.onCreateConnection(connection); + } + } +diff --git a/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.d.ts b/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +index 69a0a7d..550df53 100644 +--- a/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.d.ts ++++ b/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +@@ -1,7 +1,7 @@ + import { Kysely } from '../../kysely.js'; + import { DialectAdapterBase } from '../dialect-adapter-base.js'; + import { MigrationLockOptions } from '../dialect-adapter.js'; +-export declare class SqliteAdapter implements DialectAdapterBase { ++export declare class SqliteAdapter extends DialectAdapterBase { + /** + * Whether or not this dialect supports transactional DDL. + * +diff --git a/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.js b/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.js +index f095ebb..4f1b71f 100644 +--- a/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.js ++++ b/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.js +@@ -1,5 +1,6 @@ + /// +-export class SqliteAdapter { ++import { DialectAdapterBase } from '../dialect-adapter-base.js'; ++export class SqliteAdapter extends DialectAdapterBase { + get supportsTransactionalDdl() { + return false; + } +diff --git a/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts b/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +index 810af98..a873682 100644 +--- a/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts ++++ b/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +@@ -37,4 +37,5 @@ export interface SqliteStatement { + changes: number | bigint; + lastInsertRowid: number | bigint; + }; ++ iterate(parameters: ReadonlyArray): IterableIterator; + } +diff --git a/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-driver.js b/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-driver.js +index 23f21e3..d20935f 100644 +--- a/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-driver.js ++++ b/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-driver.js +@@ -1,4 +1,5 @@ + /// ++import { SelectQueryNode } from '../../operation-node/select-query-node.js'; + import { CompiledQuery } from '../../query-compiler/compiled-query.js'; + import { freeze, isFunction } from '../../util/object-utils.js'; + export class SqliteDriver { +@@ -67,8 +68,20 @@ class SqliteConnection { + }); + } + } +- async *streamQuery() { +- throw new Error("Sqlite driver doesn't support streaming"); ++ async *streamQuery(compiledQuery, _chunkSize) { ++ const { sql, parameters, query } = compiledQuery; ++ const stmt = this.#db.prepare(sql); ++ if (SelectQueryNode.is(query)) { ++ const iter = stmt.iterate(parameters); ++ for (const row of iter) { ++ yield { ++ rows: [row], ++ }; ++ } ++ } ++ else { ++ throw new Error('Sqlite driver only supports streaming of select queries'); ++ } + } + } + class ConnectionMutex { +diff --git a/node_modules/kysely/dist/esm/driver/driver.d.ts b/node_modules/kysely/dist/esm/driver/driver.d.ts +index 00babcb..11d2d55 100644 +--- a/node_modules/kysely/dist/esm/driver/driver.d.ts ++++ b/node_modules/kysely/dist/esm/driver/driver.d.ts +@@ -40,5 +40,5 @@ export interface Driver { + export interface TransactionSettings { + readonly isolationLevel?: IsolationLevel; + } +-export declare const TRANSACTION_ISOLATION_LEVELS: readonly ["read uncommitted", "read committed", "repeatable read", "serializable"]; ++export declare const TRANSACTION_ISOLATION_LEVELS: readonly ["read uncommitted", "read committed", "repeatable read", "serializable", "snapshot"]; + export type IsolationLevel = ArrayItemType; +diff --git a/node_modules/kysely/dist/esm/driver/driver.js b/node_modules/kysely/dist/esm/driver/driver.js +index 88c2a07..2ae1469 100644 +--- a/node_modules/kysely/dist/esm/driver/driver.js ++++ b/node_modules/kysely/dist/esm/driver/driver.js +@@ -4,4 +4,5 @@ export const TRANSACTION_ISOLATION_LEVELS = [ + 'read committed', + 'repeatable read', + 'serializable', ++ 'snapshot', + ]; +diff --git a/node_modules/kysely/dist/esm/driver/single-connection-provider.js b/node_modules/kysely/dist/esm/driver/single-connection-provider.js +index aafebb7..ef341ee 100644 +--- a/node_modules/kysely/dist/esm/driver/single-connection-provider.js ++++ b/node_modules/kysely/dist/esm/driver/single-connection-provider.js +@@ -1,4 +1,5 @@ + /// ++const ignoreError = () => { }; + export class SingleConnectionProvider { + #connection; + #runningPromise; +@@ -7,17 +8,15 @@ export class SingleConnectionProvider { + } + async provideConnection(consumer) { + while (this.#runningPromise) { +- await this.#runningPromise; ++ await this.#runningPromise.catch(ignoreError); + } +- const promise = this.#run(consumer); +- this.#runningPromise = promise +- .then(() => { +- this.#runningPromise = undefined; +- }) +- .catch(() => { ++ // `#runningPromise` must be set to undefined before it's ++ // resolved or rejected. Otherwise the while loop above ++ // will misbehave. ++ this.#runningPromise = this.#run(consumer).finally(() => { + this.#runningPromise = undefined; + }); +- return promise; ++ return this.#runningPromise; + } + // Run the runner in an async function to make sure it doesn't + // throw synchronous errors. +diff --git a/node_modules/kysely/dist/esm/expression/expression-builder.d.ts b/node_modules/kysely/dist/esm/expression/expression-builder.d.ts +index 7b4a340..07933a1 100644 +--- a/node_modules/kysely/dist/esm/expression/expression-builder.d.ts ++++ b/node_modules/kysely/dist/esm/expression/expression-builder.d.ts +@@ -14,6 +14,7 @@ import { JSONPathBuilder } from '../query-builder/json-path-builder.js'; + import { OperandExpression } from '../parser/expression-parser.js'; + import { CallbackSelection, SelectCallback, SelectExpression, Selection } from '../parser/select-parser.js'; + import { RefTuple2, RefTuple3, RefTuple4, RefTuple5, ValTuple2, ValTuple3, ValTuple4, ValTuple5 } from '../parser/tuple-parser.js'; ++import { Selectable } from '../util/column-type.js'; + export interface ExpressionBuilder { + /** + * Creates a binary expression. +@@ -344,6 +345,30 @@ export interface ExpressionBuilder { + */ + ref>(reference: RE): ExpressionWrapper>; + ref>(reference: RE, op: JSONOperatorWith$): JSONPathBuilder>; ++ /** ++ * Creates a table reference. ++ * ++ * ```ts ++ * db.selectFrom('person') ++ * .innerJoin('pet', 'pet.owner_id', 'person.id') ++ * .select(eb => [ ++ * 'person.id', ++ * sql`jsonb_agg(${eb.table('pet')})`.as('pets') ++ * ]) ++ * .groupBy('person.id') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * select "person"."id", jsonb_agg("pet") as "pets" ++ * from "person" ++ * inner join "pet" on "pet"."owner_id" = "person"."id" ++ * group by "person"."id" ++ * ``` ++ */ ++ table(table: T): ExpressionWrapper>; + /** + * Returns a value expression. + * +diff --git a/node_modules/kysely/dist/esm/expression/expression-builder.js b/node_modules/kysely/dist/esm/expression/expression-builder.js +index f550460..86b0098 100644 +--- a/node_modules/kysely/dist/esm/expression/expression-builder.js ++++ b/node_modules/kysely/dist/esm/expression/expression-builder.js +@@ -1,7 +1,7 @@ + /// + import { createSelectQueryBuilder, } from '../query-builder/select-query-builder.js'; + import { SelectQueryNode } from '../operation-node/select-query-node.js'; +-import { parseTableExpressionOrList, } from '../parser/table-parser.js'; ++import { parseTableExpressionOrList, parseTable, } from '../parser/table-parser.js'; + import { WithSchemaPlugin } from '../plugin/with-schema/with-schema-plugin.js'; + import { createQueryId } from '../util/query-id.js'; + import { createFunctionModule, } from '../query-builder/function-module.js'; +@@ -11,7 +11,7 @@ import { ParensNode } from '../operation-node/parens-node.js'; + import { ExpressionWrapper } from './expression-wrapper.js'; + import { OperatorNode, } from '../operation-node/operator-node.js'; + import { parseUnaryOperation } from '../parser/unary-operation-parser.js'; +-import { parseSafeImmediateValue, parseValueExpression, parseValueExpressionOrList, } from '../parser/value-parser.js'; ++import { parseSafeImmediateValue, parseValueExpression, } from '../parser/value-parser.js'; + import { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js'; + import { CaseBuilder } from '../query-builder/case-builder.js'; + import { CaseNode } from '../operation-node/case-node.js'; +@@ -58,8 +58,11 @@ export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) { + } + return new JSONPathBuilder(parseJSONReference(reference, op)); + }, ++ table(table) { ++ return new ExpressionWrapper(parseTable(table)); ++ }, + val(value) { +- return new ExpressionWrapper(parseValueExpressionOrList(value)); ++ return new ExpressionWrapper(parseValueExpression(value)); + }, + refTuple(...values) { + return new ExpressionWrapper(TupleNode.create(values.map(parseReferenceExpression))); +diff --git a/node_modules/kysely/dist/esm/index.d.ts b/node_modules/kysely/dist/esm/index.d.ts +index cf166f8..37cf701 100644 +--- a/node_modules/kysely/dist/esm/index.d.ts ++++ b/node_modules/kysely/dist/esm/index.d.ts +@@ -72,6 +72,12 @@ export * from './dialect/postgres/postgres-dialect.js'; + export * from './dialect/sqlite/sqlite-query-compiler.js'; + export * from './dialect/sqlite/sqlite-introspector.js'; + export * from './dialect/sqlite/sqlite-adapter.js'; ++export * from './dialect/mssql/mssql-adapter.js'; ++export * from './dialect/mssql/mssql-dialect-config.js'; ++export * from './dialect/mssql/mssql-dialect.js'; ++export * from './dialect/mssql/mssql-driver.js'; ++export * from './dialect/mssql/mssql-introspector.js'; ++export * from './dialect/mssql/mssql-query-compiler.js'; + export * from './query-compiler/default-query-compiler.js'; + export * from './query-compiler/query-compiler.js'; + export * from './migration/migrator.js'; +@@ -176,7 +182,7 @@ export * from './util/compilable.js'; + export * from './util/explainable.js'; + export * from './util/streamable.js'; + export * from './util/log.js'; +-export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, Equals, UnknownRow, Simplify, SqlBool, } from './util/type-utils.js'; ++export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, Equals, UnknownRow, Simplify, SqlBool, Nullable, } from './util/type-utils.js'; + export * from './util/infer-result.js'; + export { logOnce } from './util/log-once.js'; + export { SelectExpression, SelectCallback, SelectArg, Selection, CallbackSelection, } from './parser/select-parser.js'; +diff --git a/node_modules/kysely/dist/esm/index.js b/node_modules/kysely/dist/esm/index.js +index 1033125..e4f5004 100644 +--- a/node_modules/kysely/dist/esm/index.js ++++ b/node_modules/kysely/dist/esm/index.js +@@ -73,6 +73,12 @@ export * from './dialect/postgres/postgres-dialect.js'; + export * from './dialect/sqlite/sqlite-query-compiler.js'; + export * from './dialect/sqlite/sqlite-introspector.js'; + export * from './dialect/sqlite/sqlite-adapter.js'; ++export * from './dialect/mssql/mssql-adapter.js'; ++export * from './dialect/mssql/mssql-dialect-config.js'; ++export * from './dialect/mssql/mssql-dialect.js'; ++export * from './dialect/mssql/mssql-driver.js'; ++export * from './dialect/mssql/mssql-introspector.js'; ++export * from './dialect/mssql/mssql-query-compiler.js'; + export * from './query-compiler/default-query-compiler.js'; + export * from './query-compiler/query-compiler.js'; + export * from './migration/migrator.js'; +diff --git a/node_modules/kysely/dist/esm/kysely.d.ts b/node_modules/kysely/dist/esm/kysely.d.ts +index 52e909a..8e45b8c 100644 +--- a/node_modules/kysely/dist/esm/kysely.d.ts ++++ b/node_modules/kysely/dist/esm/kysely.d.ts +@@ -66,7 +66,7 @@ export declare class Kysely extends QueryCreator implements QueryExecuto + /** + * Returns the {@link SchemaModule} module for building database schema. + */ +- get schema(): SchemaModule; ++ get schema(): SchemaModule; + /** + * Returns a the {@link DynamicModule} module. + * +diff --git a/node_modules/kysely/dist/esm/migration/migrator.js b/node_modules/kysely/dist/esm/migration/migrator.js +index 8c7a0b4..7d3a26a 100644 +--- a/node_modules/kysely/dist/esm/migration/migrator.js ++++ b/node_modules/kysely/dist/esm/migration/migrator.js +@@ -218,10 +218,7 @@ export class Migrator { + } + if (!(await this.#doesSchemaExists())) { + try { +- await this.#props.db.schema +- .createSchema(this.#migrationTableSchema) +- .ifNotExists() +- .execute(); ++ await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema)); + } + catch (error) { + // At least on PostgreSQL, `if not exists` doesn't guarantee the `create schema` +@@ -237,20 +234,15 @@ export class Migrator { + if (!(await this.#doesTableExists(this.#migrationTable))) { + try { + if (this.#migrationTableSchema) { +- await this.#props.db.schema +- .createSchema(this.#migrationTableSchema) +- .ifNotExists() +- .execute(); ++ await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema)); + } +- await this.#props.db.schema ++ await this.#createIfNotExists(this.#props.db.schema + .withPlugin(this.#schemaPlugin) + .createTable(this.#migrationTable) +- .ifNotExists() + .addColumn('name', 'varchar(255)', (col) => col.notNull().primaryKey()) + // The migration run time as ISO string. This is not a real date type as we + // can't know which data type is supported by all future dialects. +- .addColumn('timestamp', 'varchar(255)', (col) => col.notNull()) +- .execute(); ++ .addColumn('timestamp', 'varchar(255)', (col) => col.notNull())); + } + catch (error) { + // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table` +@@ -265,13 +257,11 @@ export class Migrator { + async #ensureMigrationLockTableExists() { + if (!(await this.#doesTableExists(this.#migrationLockTable))) { + try { +- await this.#props.db.schema ++ await this.#createIfNotExists(this.#props.db.schema + .withPlugin(this.#schemaPlugin) + .createTable(this.#migrationLockTable) +- .ifNotExists() + .addColumn('id', 'varchar(255)', (col) => col.notNull().primaryKey()) +- .addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0)) +- .execute(); ++ .addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0))); + } + catch (error) { + // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table` +@@ -479,6 +469,12 @@ export class Migrator { + } + return { results }; + } ++ async #createIfNotExists(qb) { ++ if (this.#props.db.getExecutor().adapter.supportsCreateIfNotExists) { ++ qb = qb.ifNotExists(); ++ } ++ await qb.execute(); ++ } + } + class MigrationResultSetError extends Error { + #resultSet; +diff --git a/node_modules/kysely/dist/esm/operation-node/add-index-node.d.ts b/node_modules/kysely/dist/esm/operation-node/add-index-node.d.ts +new file mode 100644 +index 0000000..b81f95f +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/add-index-node.d.ts +@@ -0,0 +1,21 @@ ++import { IdentifierNode } from './identifier-node.js'; ++import { OperationNode } from './operation-node.js'; ++import { RawNode } from './raw-node.js'; ++export type AddIndexNodeProps = Omit; ++export interface AddIndexNode extends OperationNode { ++ readonly kind: 'AddIndexNode'; ++ readonly name: IdentifierNode; ++ readonly columns?: OperationNode[]; ++ readonly unique?: boolean; ++ readonly using?: RawNode; ++ readonly ifNotExists?: boolean; ++} ++/** ++ * @internal ++ */ ++export declare const AddIndexNode: Readonly<{ ++ is(node: OperationNode): node is AddIndexNode; ++ create(name: string): AddIndexNode; ++ cloneWith(node: AddIndexNode, props: AddIndexNodeProps): AddIndexNode; ++ cloneWithColumns(node: AddIndexNode, columns: OperationNode[]): AddIndexNode; ++}>; +diff --git a/node_modules/kysely/dist/esm/operation-node/add-index-node.js b/node_modules/kysely/dist/esm/operation-node/add-index-node.js +new file mode 100644 +index 0000000..134b7d8 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/add-index-node.js +@@ -0,0 +1,29 @@ ++/// ++import { freeze } from '../util/object-utils.js'; ++import { IdentifierNode } from './identifier-node.js'; ++/** ++ * @internal ++ */ ++export const AddIndexNode = freeze({ ++ is(node) { ++ return node.kind === 'AddIndexNode'; ++ }, ++ create(name) { ++ return freeze({ ++ kind: 'AddIndexNode', ++ name: IdentifierNode.create(name) ++ }); ++ }, ++ cloneWith(node, props) { ++ return freeze({ ++ ...node, ++ ...props, ++ }); ++ }, ++ cloneWithColumns(node, columns) { ++ return freeze({ ++ ...node, ++ columns: [...(node.columns || []), ...columns], ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/esm/operation-node/alter-table-node.d.ts b/node_modules/kysely/dist/esm/operation-node/alter-table-node.d.ts +index 5b03535..b09aca3 100644 +--- a/node_modules/kysely/dist/esm/operation-node/alter-table-node.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/alter-table-node.d.ts +@@ -8,7 +8,9 @@ import { AlterColumnNode } from './alter-column-node.js'; + import { AddConstraintNode } from './add-constraint-node.js'; + import { DropConstraintNode } from './drop-constraint-node.js'; + import { ModifyColumnNode } from './modify-column-node.js'; +-export type AlterTableNodeTableProps = Pick; ++import { DropIndexNode } from './drop-index-node.js'; ++import { AddIndexNode } from './add-index-node.js'; ++export type AlterTableNodeTableProps = Pick; + export type AlterTableColumnAlterationNode = RenameColumnNode | AddColumnNode | DropColumnNode | AlterColumnNode | ModifyColumnNode; + export interface AlterTableNode extends OperationNode { + readonly kind: 'AlterTableNode'; +@@ -18,6 +20,8 @@ export interface AlterTableNode extends OperationNode { + readonly columnAlterations?: ReadonlyArray; + readonly addConstraint?: AddConstraintNode; + readonly dropConstraint?: DropConstraintNode; ++ readonly addIndex?: AddIndexNode; ++ readonly dropIndex?: DropIndexNode; + } + /** + * @internal +diff --git a/node_modules/kysely/dist/esm/operation-node/column-definition-node.d.ts b/node_modules/kysely/dist/esm/operation-node/column-definition-node.d.ts +index 6442d83..b518d35 100644 +--- a/node_modules/kysely/dist/esm/operation-node/column-definition-node.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/column-definition-node.d.ts +@@ -20,6 +20,7 @@ export interface ColumnDefinitionNode extends OperationNode { + readonly unsigned?: boolean; + readonly frontModifiers?: ReadonlyArray; + readonly endModifiers?: ReadonlyArray; ++ readonly nullsNotDistinct?: boolean; + } + /** + * @internal +diff --git a/node_modules/kysely/dist/esm/operation-node/column-update-node.d.ts b/node_modules/kysely/dist/esm/operation-node/column-update-node.d.ts +index 2e8ab34..bb59937 100644 +--- a/node_modules/kysely/dist/esm/operation-node/column-update-node.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/column-update-node.d.ts +@@ -1,8 +1,7 @@ +-import { ColumnNode } from './column-node.js'; + import { OperationNode } from './operation-node.js'; + export interface ColumnUpdateNode extends OperationNode { + readonly kind: 'ColumnUpdateNode'; +- readonly column: ColumnNode; ++ readonly column: OperationNode; + readonly value: OperationNode; + } + /** +@@ -10,5 +9,5 @@ export interface ColumnUpdateNode extends OperationNode { + */ + export declare const ColumnUpdateNode: Readonly<{ + is(node: OperationNode): node is ColumnUpdateNode; +- create(column: ColumnNode, value: OperationNode): ColumnUpdateNode; ++ create(column: OperationNode, value: OperationNode): ColumnUpdateNode; + }>; +diff --git a/node_modules/kysely/dist/esm/operation-node/create-index-node.d.ts b/node_modules/kysely/dist/esm/operation-node/create-index-node.d.ts +index a3a99d1..d474032 100644 +--- a/node_modules/kysely/dist/esm/operation-node/create-index-node.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/create-index-node.d.ts +@@ -14,6 +14,7 @@ export interface CreateIndexNode extends OperationNode { + readonly using?: RawNode; + readonly ifNotExists?: boolean; + readonly where?: WhereNode; ++ readonly nullsNotDistinct?: boolean; + } + /** + * @internal +diff --git a/node_modules/kysely/dist/esm/operation-node/create-table-node.d.ts b/node_modules/kysely/dist/esm/operation-node/create-table-node.d.ts +index cc8ceda..f36036c 100644 +--- a/node_modules/kysely/dist/esm/operation-node/create-table-node.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/create-table-node.d.ts +@@ -16,6 +16,7 @@ export interface CreateTableNode extends OperationNode { + readonly onCommit?: OnCommitAction; + readonly frontModifiers?: ReadonlyArray; + readonly endModifiers?: ReadonlyArray; ++ readonly selectQuery?: OperationNode; + } + /** + * @internal +diff --git a/node_modules/kysely/dist/esm/operation-node/create-trigger-node.d.ts b/node_modules/kysely/dist/esm/operation-node/create-trigger-node.d.ts +new file mode 100644 +index 0000000..8244954 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/create-trigger-node.d.ts +@@ -0,0 +1,34 @@ ++import { OperationNode } from './operation-node.js'; ++import { TableNode } from './table-node.js'; ++import { IdentifierNode } from './identifier-node.js'; ++import { QueryNode } from './query-node.js'; ++import { TriggerEventNode } from './trigger-event-node.js'; ++import { TriggerOrderNode } from './trigger-order-node.js'; ++import { FunctionNode } from './function-node.js'; ++export type TriggerTime = 'after' | 'before' | 'instead of'; ++export type CreateTriggerNodeParams = Omit; ++export interface CreateTriggerNode extends OperationNode { ++ readonly kind: 'CreateTriggerNode'; ++ readonly name: IdentifierNode; ++ readonly queries?: ReadonlyArray; ++ readonly function?: FunctionNode; ++ readonly time?: TriggerTime; ++ readonly events?: ReadonlyArray; ++ readonly table?: TableNode; ++ readonly orReplace?: boolean; ++ readonly ifNotExists?: boolean; ++ readonly when?: OperationNode; ++ readonly temporary?: boolean; ++ readonly forEach?: 'row' | 'statement'; ++ readonly order?: TriggerOrderNode; ++} ++/** ++ * @internal ++ */ ++export declare const CreateTriggerNode: Readonly<{ ++ is(node: OperationNode): node is CreateTriggerNode; ++ create(name: IdentifierNode): CreateTriggerNode; ++ cloneWithQuery(createTrigger: CreateTriggerNode, query: QueryNode): CreateTriggerNode; ++ cloneWithEvent(createTrigger: CreateTriggerNode, event: TriggerEventNode): CreateTriggerNode; ++ cloneWith(createTrigger: CreateTriggerNode, params: CreateTriggerNodeParams): CreateTriggerNode; ++}>; +diff --git a/node_modules/kysely/dist/esm/operation-node/create-trigger-node.js b/node_modules/kysely/dist/esm/operation-node/create-trigger-node.js +new file mode 100644 +index 0000000..90dd0f3 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/create-trigger-node.js +@@ -0,0 +1,34 @@ ++/// ++import { freeze } from '../util/object-utils.js'; ++/** ++ * @internal ++ */ ++export const CreateTriggerNode = freeze({ ++ is(node) { ++ return node.kind === 'CreateTriggerNode'; ++ }, ++ create(name) { ++ return freeze({ ++ kind: 'CreateTriggerNode', ++ name, ++ }); ++ }, ++ cloneWithQuery(createTrigger, query) { ++ return freeze({ ++ ...createTrigger, ++ queries: freeze([...(createTrigger.queries || []), query]), ++ }); ++ }, ++ cloneWithEvent(createTrigger, event) { ++ return freeze({ ++ ...createTrigger, ++ events: freeze([...(createTrigger.events || []), event]), ++ }); ++ }, ++ cloneWith(createTrigger, params) { ++ return freeze({ ++ ...createTrigger, ++ ...params, ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/esm/operation-node/drop-trigger-node.d.ts b/node_modules/kysely/dist/esm/operation-node/drop-trigger-node.d.ts +new file mode 100644 +index 0000000..4e38772 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/drop-trigger-node.d.ts +@@ -0,0 +1,17 @@ ++import { OperationNode } from './operation-node.js'; ++import { SchemableIdentifierNode } from './schemable-identifier-node.js'; ++export type DropTriggerNodeParams = Omit, 'kind' | 'name'>; ++export interface DropTriggerNode extends OperationNode { ++ readonly kind: 'DropTriggerNode'; ++ readonly name: SchemableIdentifierNode; ++ readonly ifExists?: boolean; ++ readonly cascade?: boolean; ++} ++/** ++ * @internal ++ */ ++export declare const DropTriggerNode: Readonly<{ ++ is(node: OperationNode): node is DropTriggerNode; ++ create(name: SchemableIdentifierNode): DropTriggerNode; ++ cloneWith(dropTrigger: DropTriggerNode, params: DropTriggerNodeParams): DropTriggerNode; ++}>; +diff --git a/node_modules/kysely/dist/esm/operation-node/drop-trigger-node.js b/node_modules/kysely/dist/esm/operation-node/drop-trigger-node.js +new file mode 100644 +index 0000000..ebabeb4 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/drop-trigger-node.js +@@ -0,0 +1,22 @@ ++/// ++import { freeze } from '../util/object-utils.js'; ++/** ++ * @internal ++ */ ++export const DropTriggerNode = freeze({ ++ is(node) { ++ return node.kind === 'DropTriggerNode'; ++ }, ++ create(name) { ++ return freeze({ ++ kind: 'DropTriggerNode', ++ name, ++ }); ++ }, ++ cloneWith(dropTrigger, params) { ++ return freeze({ ++ ...dropTrigger, ++ ...params, ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.d.ts b/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.d.ts +index 6b3a13c..5d7fd9d 100644 +--- a/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.d.ts +@@ -85,6 +85,11 @@ import { JSONPathNode } from './json-path-node.js'; + import { JSONPathLegNode } from './json-path-leg-node.js'; + import { JSONOperatorChainNode } from './json-operator-chain-node.js'; + import { TupleNode } from './tuple-node.js'; ++import { AddIndexNode } from './add-index-node.js'; ++import { CreateTriggerNode } from './create-trigger-node.js'; ++import { DropTriggerNode } from './drop-trigger-node.js'; ++import { TriggerEventNode } from './trigger-event-node.js'; ++import { TriggerOrderNode } from './trigger-order-node.js'; + /** + * Transforms an operation node tree into another one. + * +@@ -139,9 +144,13 @@ export declare class OperationNodeTransformer { + protected transformDeleteQuery(node: DeleteQueryNode): DeleteQueryNode; + protected transformReturning(node: ReturningNode): ReturningNode; + protected transformCreateTable(node: CreateTableNode): CreateTableNode; ++ protected transformCreateTrigger(node: CreateTriggerNode): CreateTriggerNode; ++ protected transformTriggerEvent(node: TriggerEventNode): TriggerEventNode; ++ protected transformTriggerOrder(node: TriggerOrderNode): TriggerOrderNode; + protected transformColumnDefinition(node: ColumnDefinitionNode): ColumnDefinitionNode; + protected transformAddColumn(node: AddColumnNode): AddColumnNode; + protected transformDropTable(node: DropTableNode): DropTableNode; ++ protected transformDropTrigger(node: DropTriggerNode): DropTriggerNode; + protected transformOrderBy(node: OrderByNode): OrderByNode; + protected transformOrderByItem(node: OrderByItemNode): OrderByItemNode; + protected transformGroupBy(node: GroupByNode): GroupByNode; +@@ -199,6 +208,7 @@ export declare class OperationNodeTransformer { + protected transformJSONPathLeg(node: JSONPathLegNode): JSONPathLegNode; + protected transformJSONOperatorChain(node: JSONOperatorChainNode): JSONOperatorChainNode; + protected transformTuple(node: TupleNode): TupleNode; ++ protected transformAddIndex(node: AddIndexNode): AddIndexNode; + protected transformDataType(node: DataTypeNode): DataTypeNode; + protected transformSelectAll(node: SelectAllNode): SelectAllNode; + protected transformIdentifier(node: IdentifierNode): IdentifierNode; +diff --git a/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.js b/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.js +index f35075b..9e216f8 100644 +--- a/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.js ++++ b/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.js +@@ -119,6 +119,11 @@ export class OperationNodeTransformer { + JSONPathLegNode: this.transformJSONPathLeg.bind(this), + JSONOperatorChainNode: this.transformJSONOperatorChain.bind(this), + TupleNode: this.transformTuple.bind(this), ++ AddIndexNode: this.transformAddIndex.bind(this), ++ CreateTriggerNode: this.transformCreateTrigger.bind(this), ++ TriggerEventNode: this.transformTriggerEvent.bind(this), ++ TriggerOrderNode: this.transformTriggerOrder.bind(this), ++ DropTriggerNode: this.transformDropTrigger.bind(this), + }); + transformNode(node) { + if (!node) { +@@ -295,6 +300,38 @@ export class OperationNodeTransformer { + onCommit: node.onCommit, + frontModifiers: this.transformNodeList(node.frontModifiers), + endModifiers: this.transformNodeList(node.endModifiers), ++ selectQuery: this.transformNode(node.selectQuery), ++ }); ++ } ++ transformCreateTrigger(node) { ++ return requireAllProps({ ++ kind: 'CreateTriggerNode', ++ name: this.transformNode(node.name), ++ table: this.transformNode(node.table), ++ ifNotExists: node.ifNotExists, ++ time: node.time, ++ events: this.transformNodeList(node.events), ++ forEach: node.forEach, ++ orReplace: node.orReplace, ++ temporary: node.temporary, ++ queries: this.transformNodeList(node.queries), ++ function: this.transformNode(node.function), ++ when: this.transformNode(node.when), ++ order: this.transformNode(node.order), ++ }); ++ } ++ transformTriggerEvent(node) { ++ return requireAllProps({ ++ kind: 'TriggerEventNode', ++ event: node.event, ++ columns: this.transformNodeList(node.columns), ++ }); ++ } ++ transformTriggerOrder(node) { ++ return requireAllProps({ ++ kind: 'TriggerOrderNode', ++ order: node.order, ++ otherTriggerName: this.transformNode(node.otherTriggerName), + }); + } + transformColumnDefinition(node) { +@@ -313,6 +350,7 @@ export class OperationNodeTransformer { + generated: this.transformNode(node.generated), + frontModifiers: this.transformNodeList(node.frontModifiers), + endModifiers: this.transformNodeList(node.endModifiers), ++ nullsNotDistinct: node.nullsNotDistinct, + }); + } + transformAddColumn(node) { +@@ -329,6 +367,14 @@ export class OperationNodeTransformer { + cascade: node.cascade, + }); + } ++ transformDropTrigger(node) { ++ return requireAllProps({ ++ kind: 'DropTriggerNode', ++ name: this.transformNode(node.name), ++ ifExists: node.ifExists, ++ cascade: node.cascade, ++ }); ++ } + transformOrderBy(node) { + return requireAllProps({ + kind: 'OrderByNode', +@@ -414,6 +460,7 @@ export class OperationNodeTransformer { + using: this.transformNode(node.using), + ifNotExists: node.ifNotExists, + where: this.transformNode(node.where), ++ nullsNotDistinct: node.nullsNotDistinct, + }); + } + transformList(node) { +@@ -443,6 +490,7 @@ export class OperationNodeTransformer { + kind: 'UniqueConstraintNode', + columns: this.transformNodeList(node.columns), + name: this.transformNode(node.name), ++ nullsNotDistinct: node.nullsNotDistinct, + }); + } + transformForeignKeyConstraint(node) { +@@ -531,6 +579,8 @@ export class OperationNodeTransformer { + columnAlterations: this.transformNodeList(node.columnAlterations), + addConstraint: this.transformNode(node.addConstraint), + dropConstraint: this.transformNode(node.dropConstraint), ++ addIndex: this.transformNode(node.addIndex), ++ dropIndex: this.transformNode(node.dropIndex), + }); + } + transformDropColumn(node) { +@@ -763,6 +813,16 @@ export class OperationNodeTransformer { + values: this.transformNodeList(node.values), + }); + } ++ transformAddIndex(node) { ++ return requireAllProps({ ++ kind: 'AddIndexNode', ++ name: this.transformNode(node.name), ++ columns: this.transformNodeList(node.columns), ++ unique: node.unique, ++ using: this.transformNode(node.using), ++ ifNotExists: node.ifNotExists, ++ }); ++ } + transformDataType(node) { + // An Object.freezed leaf node. No need to clone. + return node; +diff --git a/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.d.ts b/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.d.ts +index 7c267cd..6a66bc7 100644 +--- a/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.d.ts +@@ -85,6 +85,11 @@ import { JSONPathNode } from './json-path-node.js'; + import { JSONPathLegNode } from './json-path-leg-node.js'; + import { JSONOperatorChainNode } from './json-operator-chain-node.js'; + import { TupleNode } from './tuple-node.js'; ++import { AddIndexNode } from './add-index-node.js'; ++import { CreateTriggerNode } from './create-trigger-node.js'; ++import { DropTriggerNode } from './drop-trigger-node.js'; ++import { TriggerEventNode } from './trigger-event-node.js'; ++import { TriggerOrderNode } from './trigger-order-node.js'; + export declare abstract class OperationNodeVisitor { + #private; + protected readonly nodeStack: OperationNode[]; +@@ -108,9 +113,13 @@ export declare abstract class OperationNodeVisitor { + protected abstract visitDeleteQuery(node: DeleteQueryNode): void; + protected abstract visitReturning(node: ReturningNode): void; + protected abstract visitCreateTable(node: CreateTableNode): void; ++ protected abstract visitCreateTrigger(node: CreateTriggerNode): void; ++ protected abstract visitTriggerEvent(node: TriggerEventNode): void; ++ protected abstract visitTriggerOrder(node: TriggerOrderNode): void; + protected abstract visitAddColumn(node: AddColumnNode): void; + protected abstract visitColumnDefinition(node: ColumnDefinitionNode): void; + protected abstract visitDropTable(node: DropTableNode): void; ++ protected abstract visitDropTrigger(node: DropTriggerNode): void; + protected abstract visitOrderBy(node: OrderByNode): void; + protected abstract visitOrderByItem(node: OrderByItemNode): void; + protected abstract visitGroupBy(node: GroupByNode): void; +@@ -176,4 +185,5 @@ export declare abstract class OperationNodeVisitor { + protected abstract visitJSONPathLeg(node: JSONPathLegNode): void; + protected abstract visitJSONOperatorChain(node: JSONOperatorChainNode): void; + protected abstract visitTuple(node: TupleNode): void; ++ protected abstract visitAddIndex(node: AddIndexNode): void; + } +diff --git a/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.js b/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.js +index 7ded762..cc6431e 100644 +--- a/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.js ++++ b/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.js +@@ -92,6 +92,11 @@ export class OperationNodeVisitor { + JSONPathLegNode: this.visitJSONPathLeg.bind(this), + JSONOperatorChainNode: this.visitJSONOperatorChain.bind(this), + TupleNode: this.visitTuple.bind(this), ++ AddIndexNode: this.visitAddIndex.bind(this), ++ CreateTriggerNode: this.visitCreateTrigger.bind(this), ++ TriggerEventNode: this.visitTriggerEvent.bind(this), ++ TriggerOrderNode: this.visitTriggerOrder.bind(this), ++ DropTriggerNode: this.visitDropTrigger.bind(this), + }); + visitNode = (node) => { + this.nodeStack.push(node); +diff --git a/node_modules/kysely/dist/esm/operation-node/operation-node.d.ts b/node_modules/kysely/dist/esm/operation-node/operation-node.d.ts +index 24cad68..a01b9ed 100644 +--- a/node_modules/kysely/dist/esm/operation-node/operation-node.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/operation-node.d.ts +@@ -1,4 +1,4 @@ +-export type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode' | 'AggregateFunctionNode' | 'OverNode' | 'PartitionByNode' | 'PartitionByItemNode' | 'SetOperationNode' | 'BinaryOperationNode' | 'UnaryOperationNode' | 'UsingNode' | 'FunctionNode' | 'CaseNode' | 'WhenNode' | 'JSONReferenceNode' | 'JSONPathNode' | 'JSONPathLegNode' | 'JSONOperatorChainNode' | 'TupleNode'; ++export type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode' | 'AggregateFunctionNode' | 'OverNode' | 'PartitionByNode' | 'PartitionByItemNode' | 'SetOperationNode' | 'BinaryOperationNode' | 'UnaryOperationNode' | 'UsingNode' | 'FunctionNode' | 'CaseNode' | 'WhenNode' | 'JSONReferenceNode' | 'JSONPathNode' | 'JSONPathLegNode' | 'JSONOperatorChainNode' | 'TupleNode' | 'AddIndexNode' | 'CreateTriggerNode' | 'TriggerEventNode' | 'TriggerOrderNode' | 'DropTriggerNode'; + export interface OperationNode { + readonly kind: OperationNodeKind; + } +diff --git a/node_modules/kysely/dist/esm/operation-node/operator-node.d.ts b/node_modules/kysely/dist/esm/operation-node/operator-node.d.ts +index 1076866..18b6e05 100644 +--- a/node_modules/kysely/dist/esm/operation-node/operator-node.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/operator-node.d.ts +@@ -1,11 +1,11 @@ + import { OperationNode } from './operation-node.js'; +-export declare const COMPARISON_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp"]; ++export declare const COMPARISON_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from"]; + export declare const ARITHMETIC_OPERATORS: readonly ["+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>"]; + export declare const JSON_OPERATORS: readonly ["->", "->>"]; +-export declare const BINARY_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"]; ++export declare const BINARY_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"]; + export declare const UNARY_FILTER_OPERATORS: readonly ["exists", "not exists"]; + export declare const UNARY_OPERATORS: readonly ["not", "-", "exists", "not exists"]; +-export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "not", "-", "exists", "not exists", "between", "between symmetric"]; ++export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "not", "-", "exists", "not exists", "between", "between symmetric"]; + export type ComparisonOperator = (typeof COMPARISON_OPERATORS)[number]; + export type ArithmeticOperator = (typeof ARITHMETIC_OPERATORS)[number]; + export type JSONOperator = (typeof JSON_OPERATORS)[number]; +diff --git a/node_modules/kysely/dist/esm/operation-node/operator-node.js b/node_modules/kysely/dist/esm/operation-node/operator-node.js +index ba655e6..2df5b92 100644 +--- a/node_modules/kysely/dist/esm/operation-node/operator-node.js ++++ b/node_modules/kysely/dist/esm/operation-node/operator-node.js +@@ -35,6 +35,8 @@ export const COMPARISON_OPERATORS = [ + '!!', + '<->', + 'regexp', ++ 'is distinct from', ++ 'is not distinct from', + ]; + export const ARITHMETIC_OPERATORS = [ + '+', +diff --git a/node_modules/kysely/dist/esm/operation-node/trigger-event-node.d.ts b/node_modules/kysely/dist/esm/operation-node/trigger-event-node.d.ts +new file mode 100644 +index 0000000..8a3677d +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/trigger-event-node.d.ts +@@ -0,0 +1,15 @@ ++import { OperationNode } from './operation-node.js'; ++export type TriggerEvent = 'delete' | 'update' | 'insert' | 'truncate'; ++export type TriggerEventNodeParams = Omit; ++export interface TriggerEventNode extends OperationNode { ++ readonly kind: 'TriggerEventNode'; ++ readonly event: TriggerEvent; ++ readonly columns?: ReadonlyArray; ++} ++/** ++ * @internal ++ */ ++export declare const TriggerEventNode: Readonly<{ ++ is(node: OperationNode): node is TriggerEventNode; ++ create(event: TriggerEvent, columns?: ReadonlyArray): TriggerEventNode; ++}>; +diff --git a/node_modules/kysely/dist/esm/operation-node/trigger-event-node.js b/node_modules/kysely/dist/esm/operation-node/trigger-event-node.js +new file mode 100644 +index 0000000..6f97ee3 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/trigger-event-node.js +@@ -0,0 +1,17 @@ ++/// ++import { freeze } from '../util/object-utils.js'; ++/** ++ * @internal ++ */ ++export const TriggerEventNode = freeze({ ++ is(node) { ++ return node.kind === 'TriggerEventNode'; ++ }, ++ create(event, columns) { ++ return freeze({ ++ kind: 'TriggerEventNode', ++ event, ++ columns, ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/esm/operation-node/trigger-order-node.d.ts b/node_modules/kysely/dist/esm/operation-node/trigger-order-node.d.ts +new file mode 100644 +index 0000000..12bad8d +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/trigger-order-node.d.ts +@@ -0,0 +1,16 @@ ++import { IdentifierNode } from './identifier-node.js'; ++import { OperationNode } from './operation-node.js'; ++export type TriggerOrder = 'follows' | 'precedes'; ++export type TriggerOrderNodeParams = Omit; ++export interface TriggerOrderNode extends OperationNode { ++ readonly kind: 'TriggerOrderNode'; ++ readonly order: TriggerOrder; ++ readonly otherTriggerName: IdentifierNode; ++} ++/** ++ * @internal ++ */ ++export declare const TriggerOrderNode: Readonly<{ ++ is(node: OperationNode): node is TriggerOrderNode; ++ create(order: TriggerOrder, otherTriggerName: IdentifierNode): TriggerOrderNode; ++}>; +diff --git a/node_modules/kysely/dist/esm/operation-node/trigger-order-node.js b/node_modules/kysely/dist/esm/operation-node/trigger-order-node.js +new file mode 100644 +index 0000000..eea5441 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/trigger-order-node.js +@@ -0,0 +1,17 @@ ++/// ++import { freeze } from '../util/object-utils.js'; ++/** ++ * @internal ++ */ ++export const TriggerOrderNode = freeze({ ++ is(node) { ++ return node.kind === 'TriggerOrderNode'; ++ }, ++ create(order, otherTriggerName) { ++ return freeze({ ++ kind: 'TriggerOrderNode', ++ order, ++ otherTriggerName, ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.d.ts b/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.d.ts +index c179f1f..4a544de 100644 +--- a/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.d.ts +@@ -5,11 +5,14 @@ export interface UniqueConstraintNode extends OperationNode { + readonly kind: 'UniqueConstraintNode'; + readonly columns: ReadonlyArray; + readonly name?: IdentifierNode; ++ readonly nullsNotDistinct?: boolean; + } ++export type UniqueConstraintNodeProps = Omit, 'kind'>; + /** + * @internal + */ + export declare const UniqueConstraintNode: Readonly<{ + is(node: OperationNode): node is UniqueConstraintNode; +- create(columns: string[], constraintName?: string): UniqueConstraintNode; ++ create(columns: string[], constraintName?: string, nullsNotDistinct?: boolean): UniqueConstraintNode; ++ cloneWith(node: UniqueConstraintNode, props: UniqueConstraintNodeProps): UniqueConstraintNode; + }>; +diff --git a/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.js b/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.js +index 0c903a6..d05e623 100644 +--- a/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.js ++++ b/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.js +@@ -9,11 +9,18 @@ export const UniqueConstraintNode = freeze({ + is(node) { + return node.kind === 'UniqueConstraintNode'; + }, +- create(columns, constraintName) { ++ create(columns, constraintName, nullsNotDistinct) { + return freeze({ + kind: 'UniqueConstraintNode', + columns: freeze(columns.map(ColumnNode.create)), + name: constraintName ? IdentifierNode.create(constraintName) : undefined, ++ nullsNotDistinct, ++ }); ++ }, ++ cloneWith(node, props) { ++ return freeze({ ++ ...node, ++ ...props, + }); + }, + }); +diff --git a/node_modules/kysely/dist/esm/parser/binary-operation-parser.js b/node_modules/kysely/dist/esm/parser/binary-operation-parser.js +index 7c6e042..b136830 100644 +--- a/node_modules/kysely/dist/esm/parser/binary-operation-parser.js ++++ b/node_modules/kysely/dist/esm/parser/binary-operation-parser.js +@@ -35,7 +35,7 @@ export function parseFilterObject(obj, combinator) { + export function parseFilterList(list, combinator) { + const combine = combinator === 'and' ? AndNode.create : OrNode.create; + if (list.length === 0) { +- return ValueNode.createImmediate(combinator === 'and'); ++ return BinaryOperationNode.create(ValueNode.createImmediate(1), OperatorNode.create('='), ValueNode.createImmediate(combinator === 'and' ? 1 : 0)); + } + let node = toOperationNode(list[0]); + for (let i = 1; i < list.length; ++i) { +diff --git a/node_modules/kysely/dist/esm/parser/reference-parser.d.ts b/node_modules/kysely/dist/esm/parser/reference-parser.d.ts +index cd4d656..08204c7 100644 +--- a/node_modules/kysely/dist/esm/parser/reference-parser.d.ts ++++ b/node_modules/kysely/dist/esm/parser/reference-parser.d.ts +@@ -16,7 +16,8 @@ export type StringReference = AnyColumn | AnyCo + export type SimpleReferenceExpression = StringReference | DynamicReferenceBuilder; + export type ReferenceExpression = SimpleReferenceExpression | ExpressionOrFactory; + export type ReferenceExpressionOrList = ReferenceExpression | ReadonlyArray>; +-export type ExtractTypeFromReferenceExpression = RE extends string ? SelectType> : RE extends SelectQueryBuilderExpression ? O[keyof O] | null : RE extends (qb: any) => SelectQueryBuilderExpression ? O[keyof O] | null : RE extends Expression ? O : RE extends (qb: any) => Expression ? O : DV; ++export type ExtractTypeFromReferenceExpression = SelectType>; ++export type ExtractRawTypeFromReferenceExpression = RE extends string ? ExtractTypeFromStringReference : RE extends SelectQueryBuilderExpression ? O[keyof O] | null : RE extends (qb: any) => SelectQueryBuilderExpression ? O[keyof O] | null : RE extends Expression ? O : RE extends (qb: any) => Expression ? O : DV; + export type ExtractTypeFromStringReference = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends AnyColumn ? ExtractColumnType : DV; + export type OrderedColumnName = C extends `${string} ${infer O}` ? O extends OrderByDirection ? C : never : C; + export type ExtractColumnNameFromOrderedColumnName = C extends `${infer CL} ${infer O}` ? O extends OrderByDirection ? CL : never : C; +diff --git a/node_modules/kysely/dist/esm/parser/update-set-parser.d.ts b/node_modules/kysely/dist/esm/parser/update-set-parser.d.ts +index d4b2dd0..2763b7c 100644 +--- a/node_modules/kysely/dist/esm/parser/update-set-parser.d.ts ++++ b/node_modules/kysely/dist/esm/parser/update-set-parser.d.ts +@@ -2,9 +2,12 @@ import { ColumnUpdateNode } from '../operation-node/column-update-node.js'; + import { ExpressionBuilder } from '../expression/expression-builder.js'; + import { UpdateKeys, UpdateType } from '../util/column-type.js'; + import { ValueExpression } from './value-parser.js'; ++import { ExtractRawTypeFromReferenceExpression, ReferenceExpression } from './reference-parser.js'; + export type UpdateObject = { + [C in UpdateKeys]?: ValueExpression> | undefined; + }; + export type UpdateObjectFactory = (eb: ExpressionBuilder) => UpdateObject; +-export type UpdateExpression = UpdateObject | UpdateObjectFactory; +-export declare function parseUpdateExpression(update: UpdateExpression): ReadonlyArray; ++export type UpdateObjectExpression = UpdateObject | UpdateObjectFactory; ++export type ExtractUpdateTypeFromReferenceExpression = UpdateType>; ++export declare function parseUpdate(...args: [UpdateObjectExpression] | [ReferenceExpression, ValueExpression]): ReadonlyArray; ++export declare function parseUpdateObjectExpression(update: UpdateObjectExpression): ReadonlyArray; +diff --git a/node_modules/kysely/dist/esm/parser/update-set-parser.js b/node_modules/kysely/dist/esm/parser/update-set-parser.js +index 495e092..e644c94 100644 +--- a/node_modules/kysely/dist/esm/parser/update-set-parser.js ++++ b/node_modules/kysely/dist/esm/parser/update-set-parser.js +@@ -4,7 +4,16 @@ import { ColumnUpdateNode } from '../operation-node/column-update-node.js'; + import { expressionBuilder, } from '../expression/expression-builder.js'; + import { isFunction } from '../util/object-utils.js'; + import { parseValueExpression } from './value-parser.js'; +-export function parseUpdateExpression(update) { ++import { parseReferenceExpression, } from './reference-parser.js'; ++export function parseUpdate(...args) { ++ if (args.length === 2) { ++ return [ ++ ColumnUpdateNode.create(parseReferenceExpression(args[0]), parseValueExpression(args[1])), ++ ]; ++ } ++ return parseUpdateObjectExpression(args[0]); ++} ++export function parseUpdateObjectExpression(update) { + const updateObj = isFunction(update) ? update(expressionBuilder()) : update; + return Object.entries(updateObj) + .filter(([_, value]) => value !== undefined) +diff --git a/node_modules/kysely/dist/esm/plugin/with-schema/with-schema-transformer.js b/node_modules/kysely/dist/esm/plugin/with-schema/with-schema-transformer.js +index 0ccc8a1..6e212e6 100644 +--- a/node_modules/kysely/dist/esm/plugin/with-schema/with-schema-transformer.js ++++ b/node_modules/kysely/dist/esm/plugin/with-schema/with-schema-transformer.js +@@ -17,12 +17,14 @@ const ROOT_OPERATION_NODES = freeze({ + CreateTableNode: true, + CreateTypeNode: true, + CreateViewNode: true, ++ CreateTriggerNode: true, + DeleteQueryNode: true, + DropIndexNode: true, + DropSchemaNode: true, + DropTableNode: true, + DropTypeNode: true, + DropViewNode: true, ++ DropTriggerNode: true, + InsertQueryNode: true, + RawNode: true, + SelectQueryNode: true, +diff --git a/node_modules/kysely/dist/esm/query-builder/function-module.d.ts b/node_modules/kysely/dist/esm/query-builder/function-module.d.ts +index 592c5e9..8f326c1 100644 +--- a/node_modules/kysely/dist/esm/query-builder/function-module.d.ts ++++ b/node_modules/kysely/dist/esm/query-builder/function-module.d.ts +@@ -7,6 +7,7 @@ import { KyselyTypeError } from '../util/type-error.js'; + import { Equals, IsAny } from '../util/type-utils.js'; + import { AggregateFunctionBuilder } from './aggregate-function-builder.js'; + import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js'; ++import { Selectable } from '../util/column-type.js'; + /** + * Helpers for type safe SQL function calls. + * +@@ -17,21 +18,47 @@ import { SelectQueryBuilderExpression } from '../query-builder/select-query-buil + * + * + * +- * This example uses the `fn` module to select some aggregates: ++ * This example shows how to create function calls. These examples also work in any ++ * other place (`where` calls, updates, inserts etc.). The only difference is that you ++ * leave out the alias (the `as` call) if you use these in any other place than `select`. + * + * ```ts ++ * import { sql } from 'kysely' ++ * + * const result = await db.selectFrom('person') + * .innerJoin('pet', 'pet.owner_id', 'person.id') +- * .select(({ fn }) => [ ++ * .select(({ fn, val, ref }) => [ + * 'person.id', + * + * // The `fn` module contains the most common + * // functions. + * fn.count('pet.id').as('pet_count'), + * +- * // You can call any function using the +- * // `agg` method +- * fn.agg('array_agg', ['pet.name']).as('pet_names') ++ * // You can call any function by calling `fn` ++ * // directly. The arguments are treated as column ++ * // references by default. If you want to pass in ++ * // values, use the `val` function. ++ * fn('concat', [ ++ * val('Ms. '), ++ * 'first_name', ++ * val(' '), ++ * 'last_name' ++ * ]).as('full_name_with_title'), ++ * ++ * // You can call any aggregate function using the ++ * // `fn.agg` function. ++ * fn.agg('array_agg', ['pet.name']).as('pet_names'), ++ * ++ * // And once again, you can use the `sql` ++ * // template tag. The template tag substitutions ++ * // are treated as values by default. If you want ++ * // to reference columns, you can use the `ref` ++ * // function. ++ * sql`concat( ++ * ${ref('first_name')}, ++ * ' ', ++ * ${ref('last_name')} ++ * )`.as('full_name') + * ]) + * .groupBy('person.id') + * .having((eb) => eb.fn.count('pet.id'), '>', 10) +@@ -44,11 +71,13 @@ import { SelectQueryBuilderExpression } from '../query-builder/select-query-buil + * select + * "person"."id", + * count("pet"."id") as "pet_count", +- * array_agg("pet"."name") as "pet_names" ++ * concat($1, "first_name", $2, "last_name") as "full_name_with_title", ++ * array_agg("pet"."name") as "pet_names", ++ * concat("first_name", ' ', "last_name") as "full_name" + * from "person" + * inner join "pet" on "pet"."owner_id" = "person"."id" + * group by "person"."id" +- * having count("pet"."id") > $1 ++ * having count("pet"."id") > $3 + * ``` + */ + export interface FunctionModule { +@@ -540,6 +569,50 @@ export interface FunctionModule { + any>(expr: RE): Exclude, null> extends ReadonlyArray ? ExpressionWrapper : KyselyTypeError<'any(expr) call failed: expr must be an array'>; + any(subquery: SelectQueryBuilderExpression>): ExpressionWrapper; + any(expr: Expression>): ExpressionWrapper; ++ /** ++ * Creates a json_agg function call. ++ * ++ * This function is only available on PostgreSQL. ++ * ++ * ```ts ++ * db.selectFrom('person') ++ * .innerJoin('pet', 'pet.owner_id', 'person.id') ++ * .select((eb) => ['first_name', eb.fn.jsonAgg('pet').as('pets')]) ++ * .groupBy('person.first_name') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * select "first_name", json_agg("pet") as "pets" ++ * from "person" ++ * inner join "pet" on "pet"."owner_id" = "person"."id" ++ * group by "person"."first_name" ++ * ``` ++ */ ++ jsonAgg>(table: T): AggregateFunctionBuilder[] : T extends Expression ? O[] : never>; ++ /** ++ * Creates a to_json function call. ++ * ++ * This function is only available on PostgreSQL. ++ * ++ * ```ts ++ * db.selectFrom('person') ++ * .innerJoin('pet', 'pet.owner_id', 'person.id') ++ * .select((eb) => ['first_name', eb.fn.toJson('pet').as('pet')]) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * select "first_name", to_json("pet") as "pet" ++ * from "person" ++ * inner join "pet" on "pet"."owner_id" = "person"."id" ++ * ``` ++ */ ++ toJson>(table: T): ExpressionWrapper : T extends Expression ? O : never>; + } + export declare function createFunctionModule(): FunctionModule; + type OutputBoundStringReference, O> = IsAny extends true ? C : Equals | null, O | null> extends true ? C : never; +diff --git a/node_modules/kysely/dist/esm/query-builder/function-module.js b/node_modules/kysely/dist/esm/query-builder/function-module.js +index 7e1d28d..3744008 100644 +--- a/node_modules/kysely/dist/esm/query-builder/function-module.js ++++ b/node_modules/kysely/dist/esm/query-builder/function-module.js +@@ -5,6 +5,8 @@ import { FunctionNode } from '../operation-node/function-node.js'; + import { parseReferenceExpressionOrList, } from '../parser/reference-parser.js'; + import { parseSelectAll } from '../parser/select-parser.js'; + import { AggregateFunctionBuilder } from './aggregate-function-builder.js'; ++import { isString } from '../util/object-utils.js'; ++import { parseTable } from '../parser/table-parser.js'; + export function createFunctionModule() { + const fn = (name, args) => { + return new ExpressionWrapper(FunctionNode.create(name, parseReferenceExpressionOrList(args))); +@@ -42,5 +44,17 @@ export function createFunctionModule() { + any(column) { + return fn('any', [column]); + }, ++ jsonAgg(table) { ++ return new AggregateFunctionBuilder({ ++ aggregateFunctionNode: AggregateFunctionNode.create('json_agg', [ ++ isString(table) ? parseTable(table) : table.toOperationNode(), ++ ]), ++ }); ++ }, ++ toJson(table) { ++ return new ExpressionWrapper(FunctionNode.create('to_json', [ ++ isString(table) ? parseTable(table) : table.toOperationNode(), ++ ])); ++ }, + }); + } +diff --git a/node_modules/kysely/dist/esm/query-builder/insert-query-builder.d.ts b/node_modules/kysely/dist/esm/query-builder/insert-query-builder.d.ts +index 6be4113..ffc6c3f 100644 +--- a/node_modules/kysely/dist/esm/query-builder/insert-query-builder.d.ts ++++ b/node_modules/kysely/dist/esm/query-builder/insert-query-builder.d.ts +@@ -5,7 +5,7 @@ import { InsertObjectOrList, InsertObjectOrListFactory } from '../parser/insert- + import { InsertQueryNode } from '../operation-node/insert-query-node.js'; + import { QueryNode } from '../operation-node/query-node.js'; + import { NarrowPartial, SimplifyResult, SimplifySingleResult } from '../util/type-utils.js'; +-import { UpdateExpression } from '../parser/update-set-parser.js'; ++import { UpdateObjectExpression } from '../parser/update-set-parser.js'; + import { Compilable } from '../util/compilable.js'; + import { QueryExecutor } from '../query-executor/query-executor.js'; + import { QueryId } from '../util/query-id.js'; +@@ -60,13 +60,18 @@ export declare class InsertQueryBuilder implements R + * }) + * .executeTakeFirst() + * ++ * // `insertId` is only available on dialects that ++ * // automatically return the id of the inserted row ++ * // such as MySQL and SQLite. On PostgreSQL, for example, ++ * // you need to add a `returning` clause to the query to ++ * // get anything out. See the "returning data" example. + * console.log(result.insertId) + * ``` + * +- * The generated SQL (PostgreSQL): ++ * The generated SQL (MySQL): + * + * ```sql +- * insert into "person" ("first_name", "last_name", "age") values ($1, $2, $3) ++ * insert into `person` (`first_name`, `last_name`, `age`) values (?, ?, ?) + * ``` + * + * +@@ -131,11 +136,14 @@ export declare class InsertQueryBuilder implements R + * ```ts + * import { sql } from 'kysely' + * ++ * const ani = "Ani" ++ * const ston = "ston" ++ * + * const result = await db + * .insertInto('person') + * .values(({ ref, selectFrom, fn }) => ({ + * first_name: 'Jennifer', +- * last_name: sql`${'Ani'} || ${'ston'}`, ++ * last_name: sql`concat(${ani}, ${ston})`, + * middle_name: ref('first_name'), + * age: selectFrom('person') + * .select(fn.avg('age') +@@ -147,8 +155,18 @@ export declare class InsertQueryBuilder implements R + * The generated SQL (PostgreSQL): + * + * ```sql +- * insert into "person" ("first_name", "last_name", "age") +- * values ($1, $2 || $3, (select avg("age") as "avg_age" from "person")) ++ * insert into "person" ( ++ * "first_name", ++ * "last_name", ++ * "middle_name", ++ * "age" ++ * ) ++ * values ( ++ * $1, ++ * concat($2, $3), ++ * "first_name", ++ * (select avg("age") as "avg_age" from "person") ++ * ) + * ``` + * + * You can also use the callback version of subqueries or raw expressions: +@@ -208,7 +226,7 @@ export declare class InsertQueryBuilder implements R + * .select((eb) => [ + * 'pet.name', + * eb.val('Petson').as('last_name'), +- * eb.val(7).as('age'), ++ * eb.lit(7).as('age'), + * ]) + * ) + * .execute() +@@ -218,7 +236,7 @@ export declare class InsertQueryBuilder implements R + * + * ```sql + * insert into "person" ("first_name", "last_name", "age") +- * select "pet"."name", $1 as "first_name", $2 as "last_name" from "pet" ++ * select "pet"."name", $1 as "last_name", 7 as "age from "pet" + * ``` + */ + expression(expression: ExpressionOrFactory): InsertQueryBuilder; +@@ -414,7 +432,7 @@ export declare class InsertQueryBuilder implements R + * .onDuplicateKeyUpdate({ species: 'hamster' }) + * ``` + */ +- onDuplicateKeyUpdate(update: UpdateExpression): InsertQueryBuilder; ++ onDuplicateKeyUpdate(update: UpdateObjectExpression): InsertQueryBuilder; + /** + * Allows you to return data from modified rows. + * +diff --git a/node_modules/kysely/dist/esm/query-builder/insert-query-builder.js b/node_modules/kysely/dist/esm/query-builder/insert-query-builder.js +index 3cd23c3..d9f1cc8 100644 +--- a/node_modules/kysely/dist/esm/query-builder/insert-query-builder.js ++++ b/node_modules/kysely/dist/esm/query-builder/insert-query-builder.js +@@ -3,7 +3,7 @@ import { parseSelectArg, parseSelectAll, } from '../parser/select-parser.js'; + import { parseInsertExpression, } from '../parser/insert-values-parser.js'; + import { InsertQueryNode } from '../operation-node/insert-query-node.js'; + import { QueryNode } from '../operation-node/query-node.js'; +-import { parseUpdateExpression, } from '../parser/update-set-parser.js'; ++import { parseUpdateObjectExpression, } from '../parser/update-set-parser.js'; + import { preventAwait } from '../util/prevent-await.js'; + import { freeze } from '../util/object-utils.js'; + import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js'; +@@ -75,7 +75,7 @@ export class InsertQueryBuilder { + * .select((eb) => [ + * 'pet.name', + * eb.val('Petson').as('last_name'), +- * eb.val(7).as('age'), ++ * eb.lit(7).as('age'), + * ]) + * ) + * .execute() +@@ -85,7 +85,7 @@ export class InsertQueryBuilder { + * + * ```sql + * insert into "person" ("first_name", "last_name", "age") +- * select "pet"."name", $1 as "first_name", $2 as "last_name" from "pet" ++ * select "pet"."name", $1 as "last_name", 7 as "age from "pet" + * ``` + */ + expression(expression) { +@@ -308,7 +308,7 @@ export class InsertQueryBuilder { + return new InsertQueryBuilder({ + ...this.#props, + queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, { +- onDuplicateKey: OnDuplicateKeyNode.create(parseUpdateExpression(update)), ++ onDuplicateKey: OnDuplicateKeyNode.create(parseUpdateObjectExpression(update)), + }), + }); + } +diff --git a/node_modules/kysely/dist/esm/query-builder/insert-result.d.ts b/node_modules/kysely/dist/esm/query-builder/insert-result.d.ts +index c16fb08..d22a9e5 100644 +--- a/node_modules/kysely/dist/esm/query-builder/insert-result.d.ts ++++ b/node_modules/kysely/dist/esm/query-builder/insert-result.d.ts +@@ -23,7 +23,14 @@ + */ + export declare class InsertResult { + /** +- * The auto incrementing primary key ++ * The auto incrementing primary key of the inserted row. ++ * ++ * This property can be undefined when the query contains an `on conflict` ++ * clause that makes the query succeed even when nothing gets inserted. ++ * ++ * This property is always undefined on dialects like PostgreSQL that ++ * don't return the inserted id by default. On those dialects you need ++ * to use the {@link ReturningInterface.returning | returning} method. + */ + readonly insertId: bigint | undefined; + /** +diff --git a/node_modules/kysely/dist/esm/query-builder/insert-result.js b/node_modules/kysely/dist/esm/query-builder/insert-result.js +index ba00de9..ff11e8c 100644 +--- a/node_modules/kysely/dist/esm/query-builder/insert-result.js ++++ b/node_modules/kysely/dist/esm/query-builder/insert-result.js +@@ -24,7 +24,14 @@ + */ + export class InsertResult { + /** +- * The auto incrementing primary key ++ * The auto incrementing primary key of the inserted row. ++ * ++ * This property can be undefined when the query contains an `on conflict` ++ * clause that makes the query succeed even when nothing gets inserted. ++ * ++ * This property is always undefined on dialects like PostgreSQL that ++ * don't return the inserted id by default. On those dialects you need ++ * to use the {@link ReturningInterface.returning | returning} method. + */ + insertId; + /** +diff --git a/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.d.ts b/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.d.ts +index 803563e..cfb9d96 100644 +--- a/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.d.ts ++++ b/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.d.ts +@@ -4,7 +4,7 @@ import { OperationNodeSource } from '../operation-node/operation-node-source.js' + import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js'; + import { ExpressionOrFactory } from '../parser/expression-parser.js'; + import { ReferenceExpression } from '../parser/reference-parser.js'; +-import { UpdateExpression } from '../parser/update-set-parser.js'; ++import { UpdateObjectExpression } from '../parser/update-set-parser.js'; + import { AnyColumn, SqlBool } from '../util/type-utils.js'; + import { WhereInterface } from './where-interface.js'; + export declare class OnConflictBuilder implements WhereInterface { +@@ -435,7 +435,7 @@ export declare class OnConflictBuilder implements Where + * ) + * ``` + */ +- doUpdateSet(update: UpdateExpression, OnConflictTables, OnConflictTables>): OnConflictUpdateBuilder, OnConflictTables>; ++ doUpdateSet(update: UpdateObjectExpression, OnConflictTables, OnConflictTables>): OnConflictUpdateBuilder, OnConflictTables>; + /** + * Simply calls the provided function passing `this` as the only argument. `$call` returns + * what the provided function returns. +diff --git a/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.js b/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.js +index bd95015..02c9135 100644 +--- a/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.js ++++ b/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.js +@@ -3,7 +3,7 @@ import { ColumnNode } from '../operation-node/column-node.js'; + import { IdentifierNode } from '../operation-node/identifier-node.js'; + import { OnConflictNode } from '../operation-node/on-conflict-node.js'; + import { parseValueBinaryOperationOrExpression, parseReferentialBinaryOperation, } from '../parser/binary-operation-parser.js'; +-import { parseUpdateExpression, } from '../parser/update-set-parser.js'; ++import { parseUpdateObjectExpression, } from '../parser/update-set-parser.js'; + import { freeze } from '../util/object-utils.js'; + import { preventAwait } from '../util/prevent-await.js'; + export class OnConflictBuilder { +@@ -173,7 +173,7 @@ export class OnConflictBuilder { + return new OnConflictUpdateBuilder({ + ...this.#props, + onConflictNode: OnConflictNode.cloneWith(this.#props.onConflictNode, { +- updates: parseUpdateExpression(update), ++ updates: parseUpdateObjectExpression(update), + }), + }); + } +diff --git a/node_modules/kysely/dist/esm/query-builder/update-query-builder.d.ts b/node_modules/kysely/dist/esm/query-builder/update-query-builder.d.ts +index 3d30eed..a71462a 100644 +--- a/node_modules/kysely/dist/esm/query-builder/update-query-builder.d.ts ++++ b/node_modules/kysely/dist/esm/query-builder/update-query-builder.d.ts +@@ -8,7 +8,7 @@ import { ReferenceExpression } from '../parser/reference-parser.js'; + import { QueryNode } from '../operation-node/query-node.js'; + import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js'; + import { UpdateQueryNode } from '../operation-node/update-query-node.js'; +-import { UpdateObject, UpdateObjectFactory } from '../parser/update-set-parser.js'; ++import { UpdateObject, UpdateObjectFactory, ExtractUpdateTypeFromReferenceExpression } from '../parser/update-set-parser.js'; + import { Compilable } from '../util/compilable.js'; + import { QueryExecutor } from '../query-executor/query-executor.js'; + import { QueryId } from '../util/query-id.js'; +@@ -24,6 +24,7 @@ import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../p + import { KyselyTypeError } from '../util/type-error.js'; + import { Streamable } from '../util/streamable.js'; + import { ExpressionOrFactory } from '../parser/expression-parser.js'; ++import { ValueExpression } from '../parser/value-parser.js'; + export declare class UpdateQueryBuilder implements WhereInterface, ReturningInterface, OperationNodeSource, Compilable, Explainable, Streamable { + #private; + constructor(props: UpdateQueryBuilderProps); +@@ -625,6 +626,20 @@ export declare class UpdateQueryBuilder eb.val('61710)) ++ * .where('id', '=', '1') ++ * .executeTakeFirst() ++ * ``` ++ * + * On PostgreSQL you can chain `returning` to the query to get + * the updated rows' columns (or any other expression) as the + * return value: +@@ -682,6 +697,7 @@ export declare class UpdateQueryBuilder): UpdateQueryBuilder; + set(update: UpdateObjectFactory): UpdateQueryBuilder; ++ set>(key: RE, value: ValueExpression>): UpdateQueryBuilder; + /** + * Allows you to return data from modified rows. + * +diff --git a/node_modules/kysely/dist/esm/query-builder/update-query-builder.js b/node_modules/kysely/dist/esm/query-builder/update-query-builder.js +index b20c740..6487ecf 100644 +--- a/node_modules/kysely/dist/esm/query-builder/update-query-builder.js ++++ b/node_modules/kysely/dist/esm/query-builder/update-query-builder.js +@@ -4,7 +4,7 @@ import { parseTableExpressionOrList, } from '../parser/table-parser.js'; + import { parseSelectArg, parseSelectAll, } from '../parser/select-parser.js'; + import { QueryNode } from '../operation-node/query-node.js'; + import { UpdateQueryNode } from '../operation-node/update-query-node.js'; +-import { parseUpdateExpression, } from '../parser/update-set-parser.js'; ++import { parseUpdate, } from '../parser/update-set-parser.js'; + import { preventAwait } from '../util/prevent-await.js'; + import { freeze } from '../util/object-utils.js'; + import { UpdateResult } from './update-result.js'; +@@ -63,10 +63,10 @@ export class UpdateQueryBuilder { + queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)), + }); + } +- set(update) { ++ set(...args) { + return new UpdateQueryBuilder({ + ...this.#props, +- queryNode: UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, parseUpdateExpression(update)), ++ queryNode: UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, parseUpdate(...args)), + }); + } + returning(selection) { +diff --git a/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.d.ts b/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.d.ts +index dbd954a..2f73125 100644 +--- a/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.d.ts ++++ b/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.d.ts +@@ -48,7 +48,7 @@ import { RootOperationNode, QueryCompiler } from './query-compiler.js'; + import { HavingNode } from '../operation-node/having-node.js'; + import { CreateSchemaNode } from '../operation-node/create-schema-node.js'; + import { DropSchemaNode } from '../operation-node/drop-schema-node.js'; +-import { AlterTableNode } from '../operation-node/alter-table-node.js'; ++import { AlterTableColumnAlterationNode, AlterTableNode } from '../operation-node/alter-table-node.js'; + import { DropColumnNode } from '../operation-node/drop-column-node.js'; + import { RenameColumnNode } from '../operation-node/rename-column-node.js'; + import { AlterColumnNode } from '../operation-node/alter-column-node.js'; +@@ -88,6 +88,11 @@ import { JSONPathNode } from '../operation-node/json-path-node.js'; + import { JSONPathLegNode } from '../operation-node/json-path-leg-node.js'; + import { JSONOperatorChainNode } from '../operation-node/json-operator-chain-node.js'; + import { TupleNode } from '../operation-node/tuple-node.js'; ++import { AddIndexNode } from '../operation-node/add-index-node.js'; ++import { CreateTriggerNode } from '../operation-node/create-trigger-node.js'; ++import { DropTriggerNode } from '../operation-node/drop-trigger-node.js'; ++import { TriggerEventNode } from '../operation-node/trigger-event-node.js'; ++import { TriggerOrderNode } from '../operation-node/trigger-order-node.js'; + export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler { + #private; + protected get numParameters(): number; +@@ -124,6 +129,10 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement + protected visitTable(node: TableNode): void; + protected visitSchemableIdentifier(node: SchemableIdentifierNode): void; + protected visitCreateTable(node: CreateTableNode): void; ++ protected visitCreateTrigger(node: CreateTriggerNode): void; ++ protected visitTriggerEvent(node: TriggerEventNode): void; ++ protected visitTriggerOrder(node: TriggerOrderNode): void; ++ protected visitDropTrigger(node: DropTriggerNode): void; + protected visitColumnDefinition(node: ColumnDefinitionNode): void; + protected getAutoIncrement(): string; + protected visitReferences(node: ReferencesNode): void; +@@ -184,6 +193,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement + protected visitJSONPath(node: JSONPathNode): void; + protected visitJSONPathLeg(node: JSONPathLegNode): void; + protected visitJSONOperatorChain(node: JSONOperatorChainNode): void; ++ protected visitAddIndex(node: AddIndexNode): void; + protected append(str: string): void; + protected appendValue(parameter: unknown): void; + protected getLeftIdentifierWrapper(): string; +@@ -197,4 +207,10 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement + protected addParameter(parameter: unknown): void; + protected appendImmediateValue(value: unknown): void; + protected sortSelectModifiers(arr: SelectModifierNode[]): ReadonlyArray; ++ protected compileColumnAlterations(columnAlterations: readonly AlterTableColumnAlterationNode[]): void; ++ /** ++ * controls whether the dialect adds a "type" keyword before a column's new data ++ * type in an ALTER TABLE statement. ++ */ ++ protected announcesNewColumnDataType(): boolean; + } +diff --git a/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.js b/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.js +index c75a92d..0762ebd 100644 +--- a/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.js ++++ b/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.js +@@ -1,4 +1,5 @@ + /// ++import { CreateTableNode } from '../operation-node/create-table-node.js'; + import { InsertQueryNode } from '../operation-node/insert-query-node.js'; + import { OperationNodeVisitor } from '../operation-node/operation-node-visitor.js'; + import { OperatorNode } from '../operation-node/operator-node.js'; +@@ -30,6 +31,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + const wrapInParens = this.parentNode !== undefined && + !ParensNode.is(this.parentNode) && + !InsertQueryNode.is(this.parentNode) && ++ !CreateTableNode.is(this.parentNode) && + !CreateViewNode.is(this.parentNode) && + !SetOperationNode.is(this.parentNode); + if (this.parentNode === undefined && node.explain) { +@@ -346,17 +348,83 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + this.append('if not exists '); + } + this.visitNode(node.table); +- this.append(' ('); +- this.compileList([...node.columns, ...(node.constraints ?? [])]); +- this.append(')'); +- if (node.onCommit) { +- this.append(' on commit '); +- this.append(node.onCommit); ++ if (node.selectQuery) { ++ this.append(' as '); ++ this.visitNode(node.selectQuery); + } +- if (node.endModifiers && node.endModifiers.length > 0) { +- this.append(' '); +- this.compileList(node.endModifiers, ' '); ++ else { ++ this.append(' ('); ++ this.compileList([...node.columns, ...(node.constraints ?? [])]); ++ this.append(')'); ++ if (node.onCommit) { ++ this.append(' on commit '); ++ this.append(node.onCommit); ++ } ++ if (node.endModifiers && node.endModifiers.length > 0) { ++ this.append(' '); ++ this.compileList(node.endModifiers, ' '); ++ } ++ } ++ } ++ visitCreateTrigger(node) { ++ if (!node.time) ++ throw new Error('Trigger time is required.'); ++ if (!node.events) ++ throw new Error('Trigger event is required.'); ++ if (!node.table) ++ throw new Error('Trigger table is required.'); ++ this.append('create '); ++ if (node.temporary) { ++ this.append('temporary '); + } ++ if (node.orReplace) { ++ this.append('or replace '); ++ } ++ this.append('trigger '); ++ if (node.ifNotExists) { ++ this.append('if not exists '); ++ } ++ this.visitNode(node.name); ++ this.append(` ${node.time} `); ++ this.compileList(node.events, ' or '); ++ this.append(' on '); ++ this.visitNode(node.table); ++ if (node.forEach) ++ this.append(` for each ${node.forEach} `); ++ if (node.when) { ++ this.append(' when '); ++ this.visitNode(node.when); ++ } ++ if (node.order) ++ this.visitNode(node.order); ++ if (node.queries) { ++ this.append(' begin '); ++ this.compileList(node.queries, '; '); ++ this.append('; '); ++ this.append('end'); ++ } ++ else if (node.function) { ++ this.append(' execute function '); ++ this.visitNode(node.function); ++ } ++ } ++ visitTriggerEvent(node) { ++ this.append(`${node.event} `); ++ if (node.event === 'update' && node.columns) { ++ this.append('of '); ++ this.compileList(node.columns, ', '); ++ } ++ } ++ visitTriggerOrder(node) { ++ this.append(`${node.order} `); ++ this.visitNode(node.otherTriggerName); ++ } ++ visitDropTrigger(node) { ++ this.append('drop trigger '); ++ if (node.ifExists) { ++ this.append('if exists '); ++ } ++ this.visitNode(node.name); + } + visitColumnDefinition(node) { + this.visitNode(node.column); +@@ -383,6 +451,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + if (node.unique) { + this.append(' unique'); + } ++ if (node.nullsNotDistinct) { ++ this.append(' nulls not distinct'); ++ } + if (node.primaryKey) { + this.append(' primary key'); + } +@@ -563,6 +634,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + this.compileList(node.columns); + this.append(')'); + } ++ if (node.nullsNotDistinct) { ++ this.append(' nulls not distinct'); ++ } + if (node.where) { + this.append(' '); + this.visitNode(node.where); +@@ -615,7 +689,11 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + this.visitNode(node.name); + this.append(' '); + } +- this.append('unique ('); ++ this.append('unique'); ++ if (node.nullsNotDistinct) { ++ this.append(' nulls not distinct'); ++ } ++ this.append(' ('); + this.compileList(node.columns); + this.append(')'); + } +@@ -696,7 +774,13 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + this.visitNode(node.dropConstraint); + } + if (node.columnAlterations) { +- this.compileList(node.columnAlterations); ++ this.compileColumnAlterations(node.columnAlterations); ++ } ++ if (node.addIndex) { ++ this.visitNode(node.addIndex); ++ } ++ if (node.dropIndex) { ++ this.visitNode(node.dropIndex); + } + } + visitAddColumn(node) { +@@ -718,7 +802,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + this.visitNode(node.column); + this.append(' '); + if (node.dataType) { +- this.append('type '); ++ if (this.announcesNewColumnDataType()) { ++ this.append('type '); ++ } + this.visitNode(node.dataType); + if (node.dataTypeExpression) { + this.append('using '); +@@ -1004,6 +1090,23 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + this.visitNode(node.values[i]); + } + } ++ visitAddIndex(node) { ++ this.append('add '); ++ if (node.unique) { ++ this.append('unique '); ++ } ++ this.append('index '); ++ this.visitNode(node.name); ++ if (node.columns) { ++ this.append(' ('); ++ this.compileList(node.columns); ++ this.append(')'); ++ } ++ if (node.using) { ++ this.append(' using '); ++ this.visitNode(node.using); ++ } ++ } + append(str) { + this.#sql += str; + } +@@ -1077,6 +1180,16 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + : 1); + return freeze(arr); + } ++ compileColumnAlterations(columnAlterations) { ++ this.compileList(columnAlterations); ++ } ++ /** ++ * controls whether the dialect adds a "type" keyword before a column's new data ++ * type in an ALTER TABLE statement. ++ */ ++ announcesNewColumnDataType() { ++ return true; ++ } + } + const SELECT_MODIFIER_SQL = freeze({ + ForKeyShare: 'for key share', +diff --git a/node_modules/kysely/dist/esm/query-compiler/query-compiler.d.ts b/node_modules/kysely/dist/esm/query-compiler/query-compiler.d.ts +index e3a8555..e96bd90 100644 +--- a/node_modules/kysely/dist/esm/query-compiler/query-compiler.d.ts ++++ b/node_modules/kysely/dist/esm/query-compiler/query-compiler.d.ts +@@ -2,17 +2,19 @@ import { AlterTableNode } from '../operation-node/alter-table-node.js'; + import { CreateIndexNode } from '../operation-node/create-index-node.js'; + import { CreateSchemaNode } from '../operation-node/create-schema-node.js'; + import { CreateTableNode } from '../operation-node/create-table-node.js'; ++import { CreateTriggerNode } from '../operation-node/create-trigger-node.js'; + import { CreateTypeNode } from '../operation-node/create-type-node.js'; + import { CreateViewNode } from '../operation-node/create-view-node.js'; + import { DropIndexNode } from '../operation-node/drop-index-node.js'; + import { DropSchemaNode } from '../operation-node/drop-schema-node.js'; + import { DropTableNode } from '../operation-node/drop-table-node.js'; ++import { DropTriggerNode } from '../operation-node/drop-trigger-node.js'; + import { DropTypeNode } from '../operation-node/drop-type-node.js'; + import { DropViewNode } from '../operation-node/drop-view-node.js'; + import { QueryNode } from '../operation-node/query-node.js'; + import { RawNode } from '../operation-node/raw-node.js'; + import { CompiledQuery } from './compiled-query.js'; +-export type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode | CreateTypeNode | DropTypeNode; ++export type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode | CreateTypeNode | DropTypeNode | CreateTriggerNode | DropTriggerNode; + /** + * a `QueryCompiler` compiles a query expressed as a tree of `OperationNodes` into SQL. + */ +diff --git a/node_modules/kysely/dist/esm/schema/alter-table-add-index-builder.d.ts b/node_modules/kysely/dist/esm/schema/alter-table-add-index-builder.d.ts +new file mode 100644 +index 0000000..b297698 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/schema/alter-table-add-index-builder.d.ts +@@ -0,0 +1,104 @@ ++import { Expression } from '../expression/expression.js'; ++import { AlterTableNode } from '../operation-node/alter-table-node.js'; ++import { IndexType } from '../operation-node/create-index-node.js'; ++import { OperationNodeSource } from '../operation-node/operation-node-source.js'; ++import { OrderedColumnName } from '../parser/reference-parser.js'; ++import { CompiledQuery } from '../query-compiler/compiled-query.js'; ++import { QueryExecutor } from '../query-executor/query-executor.js'; ++import { Compilable } from '../util/compilable.js'; ++import { QueryId } from '../util/query-id.js'; ++export declare class AlterTableAddIndexBuilder implements OperationNodeSource, Compilable { ++ #private; ++ constructor(props: AlterTableAddIndexBuilderProps); ++ /** ++ * Makes the index unique. ++ */ ++ unique(): AlterTableAddIndexBuilder; ++ /** ++ * Adds a column to the index. ++ * ++ * Also see {@link columns} for adding multiple columns at once or {@link expression} ++ * for specifying an arbitrary expression. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * await db.schema ++ * .alterTable('person') ++ * .createIndex('person_first_name_and_age_index') ++ * .column('first_name') ++ * .column('age desc') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc) ++ * ``` ++ */ ++ column(column: OrderedColumnName): AlterTableAddIndexBuilder; ++ /** ++ * Specifies a list of columns for the index. ++ * ++ * Also see {@link column} for adding a single column or {@link expression} for ++ * specifying an arbitrary expression. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * await db.schema ++ * .alterTable('person') ++ * .addIndex('person_first_name_and_age_index') ++ * .columns(['first_name', 'age desc']) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc) ++ * ``` ++ */ ++ columns(columns: OrderedColumnName[]): AlterTableAddIndexBuilder; ++ /** ++ * Specifies an arbitrary expression for the index. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * import { sql } from 'kysely' ++ * ++ * await db.schema ++ * .alterTable('person') ++ * .addIndex('person_first_name_index') ++ * .expression(sql`(first_name < 'Sami')`) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_index` ((first_name < 'Sami')) ++ * ``` ++ */ ++ expression(expression: Expression): AlterTableAddIndexBuilder; ++ /** ++ * Specifies the index type. ++ */ ++ using(indexType: IndexType): AlterTableAddIndexBuilder; ++ using(indexType: string): AlterTableAddIndexBuilder; ++ /** ++ * Simply calls the provided function passing `this` as the only argument. `$call` returns ++ * what the provided function returns. ++ */ ++ $call(func: (qb: this) => T): T; ++ toOperationNode(): AlterTableNode; ++ compile(): CompiledQuery; ++ execute(): Promise; ++} ++export interface AlterTableAddIndexBuilderProps { ++ readonly queryId: QueryId; ++ readonly executor: QueryExecutor; ++ readonly node: AlterTableNode; ++} +diff --git a/node_modules/kysely/dist/esm/schema/alter-table-add-index-builder.js b/node_modules/kysely/dist/esm/schema/alter-table-add-index-builder.js +new file mode 100644 +index 0000000..00a8ef4 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/schema/alter-table-add-index-builder.js +@@ -0,0 +1,143 @@ ++/// ++import { AddIndexNode } from '../operation-node/add-index-node.js'; ++import { AlterTableNode } from '../operation-node/alter-table-node.js'; ++import { RawNode } from '../operation-node/raw-node.js'; ++import { parseOrderedColumnName } from '../parser/reference-parser.js'; ++import { freeze } from '../util/object-utils.js'; ++import { preventAwait } from '../util/prevent-await.js'; ++export class AlterTableAddIndexBuilder { ++ #props; ++ constructor(props) { ++ this.#props = freeze(props); ++ } ++ /** ++ * Makes the index unique. ++ */ ++ unique() { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: AddIndexNode.cloneWith(this.#props.node.addIndex, { ++ unique: true, ++ }), ++ }), ++ }); ++ } ++ /** ++ * Adds a column to the index. ++ * ++ * Also see {@link columns} for adding multiple columns at once or {@link expression} ++ * for specifying an arbitrary expression. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * await db.schema ++ * .alterTable('person') ++ * .createIndex('person_first_name_and_age_index') ++ * .column('first_name') ++ * .column('age desc') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc) ++ * ``` ++ */ ++ column(column) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [parseOrderedColumnName(column)]), ++ }), ++ }); ++ } ++ /** ++ * Specifies a list of columns for the index. ++ * ++ * Also see {@link column} for adding a single column or {@link expression} for ++ * specifying an arbitrary expression. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * await db.schema ++ * .alterTable('person') ++ * .addIndex('person_first_name_and_age_index') ++ * .columns(['first_name', 'age desc']) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc) ++ * ``` ++ */ ++ columns(columns) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: AddIndexNode.cloneWithColumns(this.#props.node.addIndex, columns.map(parseOrderedColumnName)), ++ }), ++ }); ++ } ++ /** ++ * Specifies an arbitrary expression for the index. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * import { sql } from 'kysely' ++ * ++ * await db.schema ++ * .alterTable('person') ++ * .addIndex('person_first_name_index') ++ * .expression(sql`(first_name < 'Sami')`) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_index` ((first_name < 'Sami')) ++ * ``` ++ */ ++ expression(expression) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [expression.toOperationNode()]), ++ }), ++ }); ++ } ++ using(indexType) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: AddIndexNode.cloneWith(this.#props.node.addIndex, { ++ using: RawNode.createWithSql(indexType), ++ }), ++ }), ++ }); ++ } ++ /** ++ * Simply calls the provided function passing `this` as the only argument. `$call` returns ++ * what the provided function returns. ++ */ ++ $call(func) { ++ return func(this); ++ } ++ toOperationNode() { ++ return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId); ++ } ++ compile() { ++ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId); ++ } ++ async execute() { ++ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId); ++ } ++} ++preventAwait(AlterTableAddIndexBuilder, "don't await AlterTableAddIndexBuilder instances directly. To execute the query you need to call `execute`"); +diff --git a/node_modules/kysely/dist/esm/schema/alter-table-builder.d.ts b/node_modules/kysely/dist/esm/schema/alter-table-builder.d.ts +index b0726ca..4453c5b 100644 +--- a/node_modules/kysely/dist/esm/schema/alter-table-builder.d.ts ++++ b/node_modules/kysely/dist/esm/schema/alter-table-builder.d.ts +@@ -11,6 +11,8 @@ import { AlterColumnBuilderCallback } from './alter-column-builder.js'; + import { AlterTableExecutor } from './alter-table-executor.js'; + import { AlterTableAddForeignKeyConstraintBuilder } from './alter-table-add-foreign-key-constraint-builder.js'; + import { AlterTableDropConstraintBuilder } from './alter-table-drop-constraint-builder.js'; ++import { AlterTableAddIndexBuilder } from './alter-table-add-index-builder.js'; ++import { UniqueConstraintNodeBuilderCallback } from './unique-constraint-builder.js'; + /** + * This builder can be used to create a `alter table` query. + */ +@@ -35,7 +37,7 @@ export declare class AlterTableBuilder implements ColumnAlteringInterface { + /** + * See {@link CreateTableBuilder.addUniqueConstraint} + */ +- addUniqueConstraint(constraintName: string, columns: string[]): AlterTableExecutor; ++ addUniqueConstraint(constraintName: string, columns: string[], build?: UniqueConstraintNodeBuilderCallback): AlterTableExecutor; + /** + * See {@link CreateTableBuilder.addCheckConstraint} + */ +@@ -53,6 +55,44 @@ export declare class AlterTableBuilder implements ColumnAlteringInterface { + */ + addPrimaryKeyConstraint(constraintName: string, columns: string[]): AlterTableExecutor; + dropConstraint(constraintName: string): AlterTableDropConstraintBuilder; ++ /** ++ * This can be used to add index to table. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.alterTable('person') ++ * .addIndex('person_email_index') ++ * .column('email') ++ * .unique() ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add unique index `person_email_index` (`email`) ++ * ``` ++ */ ++ addIndex(indexName: string): AlterTableAddIndexBuilder; ++ /** ++ * This can be used to drop index from table. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.alterTable('person') ++ * .dropIndex('person_email_index') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` drop index `test_first_name_index` ++ * ``` ++ */ ++ dropIndex(indexName: string): AlterTableExecutor; + /** + * Calls the given function passing `this` as the only argument. + * +diff --git a/node_modules/kysely/dist/esm/schema/alter-table-builder.js b/node_modules/kysely/dist/esm/schema/alter-table-builder.js +index f003eb8..2d8dac8 100644 +--- a/node_modules/kysely/dist/esm/schema/alter-table-builder.js ++++ b/node_modules/kysely/dist/esm/schema/alter-table-builder.js +@@ -23,6 +23,10 @@ import { AlterTableExecutor } from './alter-table-executor.js'; + import { AlterTableAddForeignKeyConstraintBuilder } from './alter-table-add-foreign-key-constraint-builder.js'; + import { AlterTableDropConstraintBuilder } from './alter-table-drop-constraint-builder.js'; + import { PrimaryConstraintNode } from '../operation-node/primary-constraint-node.js'; ++import { DropIndexNode } from '../operation-node/drop-index-node.js'; ++import { AddIndexNode } from '../operation-node/add-index-node.js'; ++import { AlterTableAddIndexBuilder } from './alter-table-add-index-builder.js'; ++import { UniqueConstraintNodeBuilder, } from './unique-constraint-builder.js'; + /** + * This builder can be used to create a `alter table` query. + */ +@@ -83,11 +87,12 @@ export class AlterTableBuilder { + /** + * See {@link CreateTableBuilder.addUniqueConstraint} + */ +- addUniqueConstraint(constraintName, columns) { ++ addUniqueConstraint(constraintName, columns, build = noop) { ++ const uniqueConstraintBuilder = build(new UniqueConstraintNodeBuilder(UniqueConstraintNode.create(columns, constraintName))); + return new AlterTableExecutor({ + ...this.#props, + node: AlterTableNode.cloneWithTableProps(this.#props.node, { +- addConstraint: AddConstraintNode.create(UniqueConstraintNode.create(columns, constraintName)), ++ addConstraint: AddConstraintNode.create(uniqueConstraintBuilder.toOperationNode()), + }), + }); + } +@@ -134,6 +139,58 @@ export class AlterTableBuilder { + }), + }); + } ++ /** ++ * This can be used to add index to table. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.alterTable('person') ++ * .addIndex('person_email_index') ++ * .column('email') ++ * .unique() ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add unique index `person_email_index` (`email`) ++ * ``` ++ */ ++ addIndex(indexName) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: AddIndexNode.create(indexName), ++ }), ++ }); ++ } ++ /** ++ * This can be used to drop index from table. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.alterTable('person') ++ * .dropIndex('person_email_index') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` drop index `test_first_name_index` ++ * ``` ++ */ ++ dropIndex(indexName) { ++ return new AlterTableExecutor({ ++ ...this.#props, ++ node: AlterTableNode.cloneWithTableProps(this.#props.node, { ++ dropIndex: DropIndexNode.create(indexName), ++ }), ++ }); ++ } + /** + * Calls the given function passing `this` as the only argument. + * +diff --git a/node_modules/kysely/dist/esm/schema/column-definition-builder.d.ts b/node_modules/kysely/dist/esm/schema/column-definition-builder.d.ts +index 2a99c4c..a76104c 100644 +--- a/node_modules/kysely/dist/esm/schema/column-definition-builder.d.ts ++++ b/node_modules/kysely/dist/esm/schema/column-definition-builder.d.ts +@@ -183,6 +183,31 @@ export declare class ColumnDefinitionBuilder implements OperationNodeSource { + * ``` + */ + modifyFront(modifier: Expression): ColumnDefinitionBuilder; ++ /** ++ * Adds `nulls not distinct` specifier. ++ * Should be used with `unique` constraint. ++ * ++ * This only works on some dialects like PostgreSQL. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createTable('person') ++ * .addColumn('id', 'integer', col => col.primaryKey()) ++ * .addColumn('first_name', 'varchar(30)', col => col.unique().nullsNotDistinct()) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create table "person" ( ++ * "id" integer primary key, ++ * "first_name" varchar(30) unique nulls not distinct ++ * ) ++ * ``` ++ */ ++ nullsNotDistinct(): ColumnDefinitionBuilder; + /** + * This can be used to add any additional SQL to the end of the column definition. + * +diff --git a/node_modules/kysely/dist/esm/schema/column-definition-builder.js b/node_modules/kysely/dist/esm/schema/column-definition-builder.js +index 8ff9bf2..7111109 100644 +--- a/node_modules/kysely/dist/esm/schema/column-definition-builder.js ++++ b/node_modules/kysely/dist/esm/schema/column-definition-builder.js +@@ -256,6 +256,33 @@ export class ColumnDefinitionBuilder { + modifyFront(modifier) { + return new ColumnDefinitionBuilder(ColumnDefinitionNode.cloneWithFrontModifier(this.#node, modifier.toOperationNode())); + } ++ /** ++ * Adds `nulls not distinct` specifier. ++ * Should be used with `unique` constraint. ++ * ++ * This only works on some dialects like PostgreSQL. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createTable('person') ++ * .addColumn('id', 'integer', col => col.primaryKey()) ++ * .addColumn('first_name', 'varchar(30)', col => col.unique().nullsNotDistinct()) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create table "person" ( ++ * "id" integer primary key, ++ * "first_name" varchar(30) unique nulls not distinct ++ * ) ++ * ``` ++ */ ++ nullsNotDistinct() { ++ return new ColumnDefinitionBuilder(ColumnDefinitionNode.cloneWith(this.#node, { nullsNotDistinct: true })); ++ } + /** + * This can be used to add any additional SQL to the end of the column definition. + * +diff --git a/node_modules/kysely/dist/esm/schema/create-index-builder.d.ts b/node_modules/kysely/dist/esm/schema/create-index-builder.d.ts +index 27502c4..b44e116 100644 +--- a/node_modules/kysely/dist/esm/schema/create-index-builder.d.ts ++++ b/node_modules/kysely/dist/esm/schema/create-index-builder.d.ts +@@ -22,6 +22,29 @@ export declare class CreateIndexBuilder implements OperationNodeSourc + * Makes the index unique. + */ + unique(): CreateIndexBuilder; ++ /** ++ * Adds `nulls not distinct` specifier to index. ++ * This only works on some dialects like PostgreSQL. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createIndex('person_first_name_index') ++ * .on('person') ++ * .column('first_name') ++ * .nullsNotDistinct() ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create index "person_first_name_index" ++ * on "test" ("first_name") ++ * nulls not distinct; ++ * ``` ++ */ ++ nullsNotDistinct(): CreateIndexBuilder; + /** + * Specifies the table for the index. + */ +diff --git a/node_modules/kysely/dist/esm/schema/create-index-builder.js b/node_modules/kysely/dist/esm/schema/create-index-builder.js +index 7886ba1..5d40347 100644 +--- a/node_modules/kysely/dist/esm/schema/create-index-builder.js ++++ b/node_modules/kysely/dist/esm/schema/create-index-builder.js +@@ -37,6 +37,36 @@ export class CreateIndexBuilder { + }), + }); + } ++ /** ++ * Adds `nulls not distinct` specifier to index. ++ * This only works on some dialects like PostgreSQL. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createIndex('person_first_name_index') ++ * .on('person') ++ * .column('first_name') ++ * .nullsNotDistinct() ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create index "person_first_name_index" ++ * on "test" ("first_name") ++ * nulls not distinct; ++ * ``` ++ */ ++ nullsNotDistinct() { ++ return new CreateIndexBuilder({ ++ ...this.#props, ++ node: CreateIndexNode.cloneWith(this.#props.node, { ++ nullsNotDistinct: true, ++ }), ++ }); ++ } + /** + * Specifies the table for the index. + */ +diff --git a/node_modules/kysely/dist/esm/schema/create-table-builder.d.ts b/node_modules/kysely/dist/esm/schema/create-table-builder.d.ts +index e160575..3b7e7ce 100644 +--- a/node_modules/kysely/dist/esm/schema/create-table-builder.d.ts ++++ b/node_modules/kysely/dist/esm/schema/create-table-builder.d.ts +@@ -8,6 +8,7 @@ import { QueryId } from '../util/query-id.js'; + import { ForeignKeyConstraintBuilder } from './foreign-key-constraint-builder.js'; + import { DataTypeExpression } from '../parser/data-type-parser.js'; + import { Expression } from '../expression/expression.js'; ++import { UniqueConstraintNodeBuilderCallback } from './unique-constraint-builder.js'; + /** + * This builder can be used to create a `create table` query. + */ +@@ -56,7 +57,7 @@ export declare class CreateTableBuilder builder.nullsNotDistinct()) ++ * ``` + */ +- addUniqueConstraint(constraintName: string, columns: C[]): CreateTableBuilder; ++ addUniqueConstraint(constraintName: string, columns: C[], build?: UniqueConstraintNodeBuilderCallback): CreateTableBuilder; + /** + * Adds a check constraint. + * +@@ -205,6 +211,26 @@ export declare class CreateTableBuilder): CreateTableBuilder; ++ /** ++ * Allows to create table from `select` query. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createTable('copy') ++ * .temporary() ++ * .as(db.selectFrom('person').select(['first_name', 'last_name'])) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create temporary table "copy" as ++ * select "first_name", "last_name" from "person" ++ * ``` ++ */ ++ as(expression: Expression): CreateTableBuilder; + /** + * Calls the given function passing `this` as the only argument. + * +diff --git a/node_modules/kysely/dist/esm/schema/create-table-builder.js b/node_modules/kysely/dist/esm/schema/create-table-builder.js +index 20fb8c5..f3423e2 100644 +--- a/node_modules/kysely/dist/esm/schema/create-table-builder.js ++++ b/node_modules/kysely/dist/esm/schema/create-table-builder.js +@@ -13,6 +13,8 @@ import { UniqueConstraintNode } from '../operation-node/unique-constraint-node.j + import { CheckConstraintNode } from '../operation-node/check-constraint-node.js'; + import { parseTable } from '../parser/table-parser.js'; + import { parseOnCommitAction } from '../parser/on-commit-action-parse.js'; ++import { UniqueConstraintNodeBuilder, } from './unique-constraint-builder.js'; ++import { parseExpression } from '../parser/expression-parser.js'; + /** + * This builder can be used to create a `create table` query. + */ +@@ -84,7 +86,7 @@ export class CreateTableBuilder { + * ``` + * + * With this method, it's once again good to remember that Kysely just builds the +- * query and doesn't provide the same API for all databses. For example, some ++ * query and doesn't provide the same API for all databases. For example, some + * databases like older MySQL don't support the `references` statement in the + * column definition. Instead foreign key constraints need to be defined in the + * `create table` query. See the next example: +@@ -143,11 +145,17 @@ export class CreateTableBuilder { + * ```ts + * addUniqueConstraint('first_name_last_name_unique', ['first_name', 'last_name']) + * ``` ++ * ++ * In dialects such as PostgreSQL you can specify `nulls not distinct` as follows: ++ * ```ts ++ * addUniqueConstraint('first_name_last_name_unique', ['first_name', 'last_name'], (builder) => builder.nullsNotDistinct()) ++ * ``` + */ +- addUniqueConstraint(constraintName, columns) { ++ addUniqueConstraint(constraintName, columns, build = noop) { ++ const uniqueConstraintBuilder = build(new UniqueConstraintNodeBuilder(UniqueConstraintNode.create(columns, constraintName))); + return new CreateTableBuilder({ + ...this.#props, +- node: CreateTableNode.cloneWithConstraint(this.#props.node, UniqueConstraintNode.create(columns, constraintName)), ++ node: CreateTableNode.cloneWithConstraint(this.#props.node, uniqueConstraintBuilder.toOperationNode()), + }); + } + /** +@@ -270,6 +278,33 @@ export class CreateTableBuilder { + node: CreateTableNode.cloneWithEndModifier(this.#props.node, modifier.toOperationNode()), + }); + } ++ /** ++ * Allows to create table from `select` query. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createTable('copy') ++ * .temporary() ++ * .as(db.selectFrom('person').select(['first_name', 'last_name'])) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create temporary table "copy" as ++ * select "first_name", "last_name" from "person" ++ * ``` ++ */ ++ as(expression) { ++ return new CreateTableBuilder({ ++ ...this.#props, ++ node: CreateTableNode.cloneWith(this.#props.node, { ++ selectQuery: parseExpression(expression), ++ }), ++ }); ++ } + /** + * Calls the given function passing `this` as the only argument. + * +diff --git a/node_modules/kysely/dist/esm/schema/create-trigger-builder.d.ts b/node_modules/kysely/dist/esm/schema/create-trigger-builder.d.ts +new file mode 100644 +index 0000000..c65746a +--- /dev/null ++++ b/node_modules/kysely/dist/esm/schema/create-trigger-builder.d.ts +@@ -0,0 +1,68 @@ ++import { CreateTriggerNode } from '../operation-node/create-trigger-node.js'; ++import { OperationNodeSource } from '../operation-node/operation-node-source.js'; ++import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js'; ++import { ReferenceExpression } from '../parser/reference-parser.js'; ++import { CompiledQuery } from '../query-compiler/compiled-query.js'; ++import { QueryExecutor } from '../query-executor/query-executor.js'; ++import { Compilable } from '../util/compilable.js'; ++import { QueryId } from '../util/query-id.js'; ++import { AnyColumn, AnyColumnWithTable, SqlBool } from '../util/type-utils.js'; ++import { TriggerEvent } from '../operation-node/trigger-event-node.js'; ++import { ExpressionOrFactory } from '../parser/expression-parser.js'; ++import { TriggerQueryCreator } from '../trigger-query-creator.js'; ++export type DatabaseWithOldNewTables = DB & { ++ old: DB[TB]; ++ new: DB[TB]; ++}; ++/** ++ * This builder can be used to create a `create table` query. ++ */ ++export declare class CreateTriggerBuilder implements OperationNodeSource, Compilable { ++ #private; ++ constructor(props: CreateTriggerBuilderProps); ++ before(): CreateTriggerBuilder; ++ after(): CreateTriggerBuilder; ++ insteadOf(): CreateTriggerBuilder; ++ addEvent(event: E, columns?: E extends 'update' ? AnyColumn[] : never[]): CreateTriggerBuilder; ++ forEachRow(): CreateTriggerBuilder; ++ forEachStatement(): CreateTriggerBuilder; ++ follows(otherTriggerName: string): CreateTriggerBuilder; ++ precedes(otherTriggerName: string): CreateTriggerBuilder; ++ /** ++ * Specifies the table for the trigger. ++ */ ++ onTable(table: TE, schema?: string): CreateTriggerBuilder; ++ /** ++ * Adds the "temporary" modifier. ++ * ++ * Use this to create a temporary trigger. ++ */ ++ temporary(): CreateTriggerBuilder; ++ /** ++ * Adds the "if not exists" modifier. ++ * ++ * If the trigger already exists, no error is thrown if this method has been called. ++ */ ++ ifNotExists(): CreateTriggerBuilder; ++ /** ++ * Only supported on PostgreSQL ++ */ ++ orReplace(): CreateTriggerBuilder; ++ /** ++ * Adds a query to the trigger. ++ */ ++ addQuery(build: QueryCreatorCallback): CreateTriggerBuilder; ++ function(name: string, args: ReadonlyArray>): CreateTriggerBuilder; ++ when, 'old' | 'new'>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList): CreateTriggerBuilder; ++ when(factory: ExpressionOrFactory, 'old' | 'new', SqlBool>): CreateTriggerBuilder; ++ $call(func: (qb: this) => T): T; ++ toOperationNode(): CreateTriggerNode; ++ compile(): CompiledQuery; ++ execute(): Promise; ++} ++export interface CreateTriggerBuilderProps { ++ readonly queryId: QueryId; ++ readonly executor: QueryExecutor; ++ readonly node: CreateTriggerNode; ++} ++export type QueryCreatorCallback = (creator: TriggerQueryCreator) => OperationNodeSource; +diff --git a/node_modules/kysely/dist/esm/schema/create-trigger-builder.js b/node_modules/kysely/dist/esm/schema/create-trigger-builder.js +new file mode 100644 +index 0000000..d3eb721 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/schema/create-trigger-builder.js +@@ -0,0 +1,177 @@ ++/// ++import { CreateTriggerNode } from '../operation-node/create-trigger-node.js'; ++import { QueryNode } from '../operation-node/query-node.js'; ++import { parseValueBinaryOperationOrExpression, } from '../parser/binary-operation-parser.js'; ++import { parseOrderedColumnName, parseReferenceExpressionOrList, } from '../parser/reference-parser.js'; ++import { ImmediateValueTransformer } from '../plugin/immediate-value/immediate-value-transformer.js'; ++import { freeze } from '../util/object-utils.js'; ++import { preventAwait } from '../util/prevent-await.js'; ++import { IdentifierNode } from '../operation-node/identifier-node.js'; ++import { TriggerOrderNode } from '../operation-node/trigger-order-node.js'; ++import { TriggerEventNode, } from '../operation-node/trigger-event-node.js'; ++import { FunctionNode } from '../operation-node/function-node.js'; ++import { TriggerQueryCreator } from '../trigger-query-creator.js'; ++import { TableNode } from '../operation-node/table-node.js'; ++/** ++ * This builder can be used to create a `create table` query. ++ */ ++export class CreateTriggerBuilder { ++ #props; ++ constructor(props) { ++ this.#props = freeze(props); ++ } ++ before() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ time: 'before', ++ }), ++ }); ++ } ++ after() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ time: 'after', ++ }), ++ }); ++ } ++ insteadOf() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ time: 'instead of', ++ }), ++ }); ++ } ++ addEvent(event, columns) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWithEvent(this.#props.node, TriggerEventNode.create(event, columns?.map(parseOrderedColumnName))), ++ }); ++ } ++ forEachRow() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ forEach: `row`, ++ }), ++ }); ++ } ++ forEachStatement() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ forEach: `statement`, ++ }), ++ }); ++ } ++ follows(otherTriggerName) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ order: TriggerOrderNode.create('follows', IdentifierNode.create(otherTriggerName)), ++ }), ++ }); ++ } ++ precedes(otherTriggerName) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ order: TriggerOrderNode.create('precedes', IdentifierNode.create(otherTriggerName)), ++ }), ++ }); ++ } ++ /** ++ * Specifies the table for the trigger. ++ */ ++ onTable(table, schema) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ table: schema ++ ? TableNode.createWithSchema(schema, table) ++ : TableNode.create(table), ++ }), ++ }); ++ } ++ /** ++ * Adds the "temporary" modifier. ++ * ++ * Use this to create a temporary trigger. ++ */ ++ temporary() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ temporary: true, ++ }), ++ }); ++ } ++ /** ++ * Adds the "if not exists" modifier. ++ * ++ * If the trigger already exists, no error is thrown if this method has been called. ++ */ ++ ifNotExists() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ ifNotExists: true, ++ }), ++ }); ++ } ++ /** ++ * Only supported on PostgreSQL ++ */ ++ orReplace() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ orReplace: true, ++ }), ++ }); ++ } ++ /** ++ * Adds a query to the trigger. ++ */ ++ addQuery(build) { ++ const node = build(new TriggerQueryCreator({ executor: this.#props.executor })).toOperationNode(); ++ if (!QueryNode.is(node)) ++ throw new Error('Must be a query node.'); ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWithQuery(this.#props.node, node), ++ }); ++ } ++ function(name, args) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ function: FunctionNode.create(name, parseReferenceExpressionOrList(args)), ++ }), ++ }); ++ } ++ when(...args) { ++ const transformer = new ImmediateValueTransformer(); ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ when: transformer.transformNode(parseValueBinaryOperationOrExpression(args)), ++ }), ++ }); ++ } ++ $call(func) { ++ return func(this); ++ } ++ toOperationNode() { ++ return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId); ++ } ++ compile() { ++ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId); ++ } ++ async execute() { ++ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId); ++ } ++} ++preventAwait(CreateTriggerBuilder, "don't await CreateTriggerBuilder instances directly. To execute the query you need to call `execute`"); +diff --git a/node_modules/kysely/dist/esm/schema/drop-trigger-builder.d.ts b/node_modules/kysely/dist/esm/schema/drop-trigger-builder.d.ts +new file mode 100644 +index 0000000..b0e3fce +--- /dev/null ++++ b/node_modules/kysely/dist/esm/schema/drop-trigger-builder.d.ts +@@ -0,0 +1,25 @@ ++import { OperationNodeSource } from '../operation-node/operation-node-source.js'; ++import { CompiledQuery } from '../query-compiler/compiled-query.js'; ++import { Compilable } from '../util/compilable.js'; ++import { QueryExecutor } from '../query-executor/query-executor.js'; ++import { QueryId } from '../util/query-id.js'; ++import { DropTriggerNode } from '../operation-node/drop-trigger-node.js'; ++export declare class DropTriggerBuilder implements OperationNodeSource, Compilable { ++ #private; ++ constructor(props: DropTriggerBuilderProps); ++ ifExists(): DropTriggerBuilder; ++ cascade(): DropTriggerBuilder; ++ /** ++ * Simply calls the provided function passing `this` as the only argument. `$call` returns ++ * what the provided function returns. ++ */ ++ $call(func: (qb: this) => T): T; ++ toOperationNode(): DropTriggerNode; ++ compile(): CompiledQuery; ++ execute(): Promise; ++} ++export interface DropTriggerBuilderProps { ++ readonly queryId: QueryId; ++ readonly executor: QueryExecutor; ++ readonly node: DropTriggerNode; ++} +diff --git a/node_modules/kysely/dist/esm/schema/drop-trigger-builder.js b/node_modules/kysely/dist/esm/schema/drop-trigger-builder.js +new file mode 100644 +index 0000000..0a0f2e1 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/schema/drop-trigger-builder.js +@@ -0,0 +1,43 @@ ++/// ++import { preventAwait } from '../util/prevent-await.js'; ++import { freeze } from '../util/object-utils.js'; ++import { DropTriggerNode } from '../operation-node/drop-trigger-node.js'; ++export class DropTriggerBuilder { ++ #props; ++ constructor(props) { ++ this.#props = freeze(props); ++ } ++ ifExists() { ++ return new DropTriggerBuilder({ ++ ...this.#props, ++ node: DropTriggerNode.cloneWith(this.#props.node, { ++ ifExists: true, ++ }), ++ }); ++ } ++ cascade() { ++ return new DropTriggerBuilder({ ++ ...this.#props, ++ node: DropTriggerNode.cloneWith(this.#props.node, { ++ cascade: true, ++ }), ++ }); ++ } ++ /** ++ * Simply calls the provided function passing `this` as the only argument. `$call` returns ++ * what the provided function returns. ++ */ ++ $call(func) { ++ return func(this); ++ } ++ toOperationNode() { ++ return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId); ++ } ++ compile() { ++ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId); ++ } ++ async execute() { ++ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId); ++ } ++} ++preventAwait(DropTriggerBuilder, "don't await DropTriggerBuilder instances directly. To execute the query you need to call `execute`"); +diff --git a/node_modules/kysely/dist/esm/schema/schema.d.ts b/node_modules/kysely/dist/esm/schema/schema.d.ts +index 8634b84..19cf68c 100644 +--- a/node_modules/kysely/dist/esm/schema/schema.d.ts ++++ b/node_modules/kysely/dist/esm/schema/schema.d.ts +@@ -11,10 +11,12 @@ import { DropViewBuilder } from './drop-view-builder.js'; + import { KyselyPlugin } from '../plugin/kysely-plugin.js'; + import { CreateTypeBuilder } from './create-type-builder.js'; + import { DropTypeBuilder } from './drop-type-builder.js'; ++import { CreateTriggerBuilder } from './create-trigger-builder.js'; ++import { DropTriggerBuilder } from './drop-trigger-builder.js'; + /** + * Provides methods for building database schema. + */ +-export declare class SchemaModule { ++export declare class SchemaModule { + #private; + constructor(executor: QueryExecutor); + /** +@@ -201,16 +203,18 @@ export declare class SchemaModule { + * ``` + */ + dropType(typeName: string): DropTypeBuilder; ++ createTrigger(name: string): CreateTriggerBuilder; ++ dropTrigger(triggerName: string): DropTriggerBuilder; + /** + * Returns a copy of this schema module with the given plugin installed. + */ +- withPlugin(plugin: KyselyPlugin): SchemaModule; ++ withPlugin(plugin: KyselyPlugin): SchemaModule; + /** + * Returns a copy of this schema module without any plugins. + */ +- withoutPlugins(): SchemaModule; ++ withoutPlugins(): SchemaModule; + /** + * See {@link QueryCreator.withSchema} + */ +- withSchema(schema: string): SchemaModule; ++ withSchema(schema: string): SchemaModule; + } +diff --git a/node_modules/kysely/dist/esm/schema/schema.js b/node_modules/kysely/dist/esm/schema/schema.js +index 8244039..4ba6917 100644 +--- a/node_modules/kysely/dist/esm/schema/schema.js ++++ b/node_modules/kysely/dist/esm/schema/schema.js +@@ -25,6 +25,11 @@ import { DropTypeBuilder } from './drop-type-builder.js'; + import { CreateTypeNode } from '../operation-node/create-type-node.js'; + import { DropTypeNode } from '../operation-node/drop-type-node.js'; + import { parseSchemableIdentifier } from '../parser/identifier-parser.js'; ++import { CreateTriggerBuilder } from './create-trigger-builder.js'; ++import { CreateTriggerNode } from '../operation-node/create-trigger-node.js'; ++import { IdentifierNode } from '../operation-node/identifier-node.js'; ++import { DropTriggerNode } from '../operation-node/drop-trigger-node.js'; ++import { DropTriggerBuilder } from './drop-trigger-builder.js'; + /** + * Provides methods for building database schema. + */ +@@ -283,6 +288,20 @@ export class SchemaModule { + node: DropTypeNode.create(parseSchemableIdentifier(typeName)), + }); + } ++ createTrigger(name) { ++ return new CreateTriggerBuilder({ ++ queryId: createQueryId(), ++ executor: this.#executor, ++ node: CreateTriggerNode.create(IdentifierNode.create(name)), ++ }); ++ } ++ dropTrigger(triggerName) { ++ return new DropTriggerBuilder({ ++ queryId: createQueryId(), ++ executor: this.#executor, ++ node: DropTriggerNode.create(parseSchemableIdentifier(triggerName)), ++ }); ++ } + /** + * Returns a copy of this schema module with the given plugin installed. + */ +diff --git a/node_modules/kysely/dist/esm/schema/unique-constraint-builder.d.ts b/node_modules/kysely/dist/esm/schema/unique-constraint-builder.d.ts +new file mode 100644 +index 0000000..4362213 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/schema/unique-constraint-builder.d.ts +@@ -0,0 +1,14 @@ ++import { OperationNodeSource } from '../operation-node/operation-node-source.js'; ++import { UniqueConstraintNode } from '../operation-node/unique-constraint-node.js'; ++export declare class UniqueConstraintNodeBuilder implements OperationNodeSource { ++ #private; ++ constructor(node: UniqueConstraintNode); ++ toOperationNode(): UniqueConstraintNode; ++ /** ++ * Adds `nulls not distinct` to the unique constraint definition ++ * ++ * Supported by PostgreSQL dialect only ++ */ ++ nullsNotDistinct(): UniqueConstraintNodeBuilder; ++} ++export type UniqueConstraintNodeBuilderCallback = (builder: UniqueConstraintNodeBuilder) => UniqueConstraintNodeBuilder; +diff --git a/node_modules/kysely/dist/esm/schema/unique-constraint-builder.js b/node_modules/kysely/dist/esm/schema/unique-constraint-builder.js +new file mode 100644 +index 0000000..dba8cef +--- /dev/null ++++ b/node_modules/kysely/dist/esm/schema/unique-constraint-builder.js +@@ -0,0 +1,21 @@ ++/// ++import { UniqueConstraintNode } from '../operation-node/unique-constraint-node.js'; ++import { preventAwait } from '../util/prevent-await.js'; ++export class UniqueConstraintNodeBuilder { ++ #node; ++ constructor(node) { ++ this.#node = node; ++ } ++ toOperationNode() { ++ return this.#node; ++ } ++ /** ++ * Adds `nulls not distinct` to the unique constraint definition ++ * ++ * Supported by PostgreSQL dialect only ++ */ ++ nullsNotDistinct() { ++ return new UniqueConstraintNodeBuilder(UniqueConstraintNode.cloneWith(this.#node, { nullsNotDistinct: true })); ++ } ++} ++preventAwait(UniqueConstraintNodeBuilder, "don't await UniqueConstraintNodeBuilder instances directly."); +diff --git a/node_modules/kysely/dist/esm/trigger-query-creator.d.ts b/node_modules/kysely/dist/esm/trigger-query-creator.d.ts +new file mode 100644 +index 0000000..51d0b2f +--- /dev/null ++++ b/node_modules/kysely/dist/esm/trigger-query-creator.d.ts +@@ -0,0 +1,35 @@ ++import { SelectQueryBuilder } from './query-builder/select-query-builder.js'; ++import { InsertQueryBuilder } from './query-builder/insert-query-builder.js'; ++import { DeleteQueryBuilder } from './query-builder/delete-query-builder.js'; ++import { UpdateQueryBuilder } from './query-builder/update-query-builder.js'; ++import { TableExpression, From, FromTables, TableReference, ExtractTableAlias, AnyAliasedTable, PickTableWithAlias } from './parser/table-parser.js'; ++import { InsertResult } from './query-builder/insert-result.js'; ++import { DeleteResult } from './query-builder/delete-result.js'; ++import { UpdateResult } from './query-builder/update-result.js'; ++import { KyselyPlugin } from './plugin/kysely-plugin.js'; ++import { CallbackSelection, SelectCallback, SelectExpression, Selection } from './parser/select-parser.js'; ++import { QueryCreatorProps } from './query-creator.js'; ++import { DatabaseWithOldNewTables } from './schema/create-trigger-builder.js'; ++export declare class TriggerQueryCreator { ++ #private; ++ constructor(props: QueryCreatorProps); ++ selectFrom(from: TE[]): SelectQueryBuilder, ExtractTableAlias | 'new' | 'old', {}>; ++ selectFrom>(from: TE[]): SelectQueryBuilder, TE>, FromTables | 'new' | 'old', {}>; ++ selectFrom(from: TE): SelectQueryBuilder, ExtractTableAlias | 'new' | 'old', {}>; ++ selectFrom>(from: TE): SelectQueryBuilder & PickTableWithAlias, TE>, ExtractTableAlias | 'new' | 'old', {}>; ++ selectFrom>(from: TE): SelectQueryBuilder, TE>, FromTables | 'new' | 'old', {}>; ++ selectNoFrom>(selections: ReadonlyArray): SelectQueryBuilder>; ++ selectNoFrom>(callback: CB): SelectQueryBuilder>; ++ selectNoFrom>(selection: SE): SelectQueryBuilder>; ++ insertInto(table: T): InsertQueryBuilder; ++ replaceInto(table: T): InsertQueryBuilder; ++ deleteFrom(from: TR[]): DeleteQueryBuilder, ExtractTableAlias | 'new' | 'old', DeleteResult>; ++ deleteFrom>(tables: TR[]): DeleteQueryBuilder, TR>, FromTables | 'new' | 'old', DeleteResult>; ++ deleteFrom(from: TR): DeleteQueryBuilder, ExtractTableAlias | 'new' | 'old', DeleteResult>; ++ deleteFrom>(table: TR): DeleteQueryBuilder, TR>, FromTables | 'new' | 'old', DeleteResult>; ++ updateTable(table: TR): UpdateQueryBuilder, ExtractTableAlias, UpdateResult>; ++ updateTable>(table: TR): UpdateQueryBuilder, ExtractTableAlias, ExtractTableAlias, UpdateResult>; ++ updateTable>(table: TR): UpdateQueryBuilder, FromTables, FromTables, UpdateResult>; ++ withPlugin(plugin: KyselyPlugin): TriggerQueryCreator; ++ withoutPlugins(): TriggerQueryCreator; ++} +diff --git a/node_modules/kysely/dist/esm/trigger-query-creator.js b/node_modules/kysely/dist/esm/trigger-query-creator.js +new file mode 100644 +index 0000000..c8960dc +--- /dev/null ++++ b/node_modules/kysely/dist/esm/trigger-query-creator.js +@@ -0,0 +1,73 @@ ++/// ++import { createSelectQueryBuilder, } from './query-builder/select-query-builder.js'; ++import { InsertQueryBuilder } from './query-builder/insert-query-builder.js'; ++import { DeleteQueryBuilder } from './query-builder/delete-query-builder.js'; ++import { UpdateQueryBuilder } from './query-builder/update-query-builder.js'; ++import { DeleteQueryNode } from './operation-node/delete-query-node.js'; ++import { InsertQueryNode } from './operation-node/insert-query-node.js'; ++import { SelectQueryNode } from './operation-node/select-query-node.js'; ++import { UpdateQueryNode } from './operation-node/update-query-node.js'; ++import { parseTable, parseTableExpression, parseTableExpressionOrList, } from './parser/table-parser.js'; ++import { createQueryId } from './util/query-id.js'; ++import { freeze } from './util/object-utils.js'; ++import { parseSelectArg, } from './parser/select-parser.js'; ++export class TriggerQueryCreator { ++ #props; ++ constructor(props) { ++ this.#props = freeze(props); ++ } ++ selectFrom(from) { ++ return createSelectQueryBuilder({ ++ queryId: createQueryId(), ++ executor: this.#props.executor, ++ queryNode: SelectQueryNode.createFrom(parseTableExpressionOrList(from), this.#props.withNode), ++ }); ++ } ++ selectNoFrom(selection) { ++ return createSelectQueryBuilder({ ++ queryId: createQueryId(), ++ executor: this.#props.executor, ++ queryNode: SelectQueryNode.cloneWithSelections(SelectQueryNode.create(this.#props.withNode), parseSelectArg(selection)), ++ }); ++ } ++ insertInto(table) { ++ return new InsertQueryBuilder({ ++ queryId: createQueryId(), ++ executor: this.#props.executor, ++ queryNode: InsertQueryNode.create(parseTable(table), this.#props.withNode), ++ }); ++ } ++ replaceInto(table) { ++ return new InsertQueryBuilder({ ++ queryId: createQueryId(), ++ executor: this.#props.executor, ++ queryNode: InsertQueryNode.create(parseTable(table), this.#props.withNode, true), ++ }); ++ } ++ deleteFrom(tables) { ++ return new DeleteQueryBuilder({ ++ queryId: createQueryId(), ++ executor: this.#props.executor, ++ queryNode: DeleteQueryNode.create(parseTableExpressionOrList(tables), this.#props.withNode), ++ }); ++ } ++ updateTable(table) { ++ return new UpdateQueryBuilder({ ++ queryId: createQueryId(), ++ executor: this.#props.executor, ++ queryNode: UpdateQueryNode.create(parseTableExpression(table), this.#props.withNode), ++ }); ++ } ++ withPlugin(plugin) { ++ return new TriggerQueryCreator({ ++ ...this.#props, ++ executor: this.#props.executor.withPlugin(plugin), ++ }); ++ } ++ withoutPlugins() { ++ return new TriggerQueryCreator({ ++ ...this.#props, ++ executor: this.#props.executor.withoutPlugins(), ++ }); ++ } ++} +diff --git a/node_modules/kysely/dist/esm/util/object-utils.d.ts b/node_modules/kysely/dist/esm/util/object-utils.d.ts +index 1b9f563..c9fa82b 100644 +--- a/node_modules/kysely/dist/esm/util/object-utils.d.ts ++++ b/node_modules/kysely/dist/esm/util/object-utils.d.ts +@@ -6,7 +6,7 @@ export declare function isNumber(obj: unknown): obj is number; + export declare function isBoolean(obj: unknown): obj is boolean; + export declare function isNull(obj: unknown): obj is null; + export declare function isDate(obj: unknown): obj is Date; +-export declare function isBigInt(obj: unknown): obj is BigInt; ++export declare function isBigInt(obj: unknown): obj is bigint; + export declare function isBuffer(obj: unknown): obj is { + length: number; + }; +diff --git a/node_modules/kysely/helpers/sqlite.js b/node_modules/kysely/helpers/sqlite.js +index cc6b411..a579b48 100644 +--- a/node_modules/kysely/helpers/sqlite.js ++++ b/node_modules/kysely/helpers/sqlite.js +@@ -1 +1 @@ +-module.exports = require('../dist/cjs/helpers/sqlite.js') +\ No newline at end of file ++module.exports = require('kysely/dist/cjs/helpers/sqlite.js') +\ No newline at end of file diff --git a/packages/core/patches/kysely+0.26.3.patch b/packages/core/patches/kysely+0.26.3.patch new file mode 100644 index 000000000..dbd68b9fd --- /dev/null +++ b/packages/core/patches/kysely+0.26.3.patch @@ -0,0 +1,6374 @@ +diff --git a/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.d.ts b/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.d.ts +index dc87916..e3fb628 100644 +--- a/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.d.ts ++++ b/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.d.ts +@@ -7,6 +7,14 @@ import { DialectAdapter, MigrationLockOptions } from './dialect-adapter.js'; + * they are added and there will be less breaking changes. + */ + export declare abstract class DialectAdapterBase implements DialectAdapter { ++ /** ++ * Whether or not this dialect supports `if not exists` in creation of tables/schemas/views/etc. ++ * ++ * If this is false, Kysely's internal migrations tables and schemas are created ++ * without `if not exists` in migrations. This is not a problem if the dialect ++ * supports transactional DDL. ++ */ ++ get supportsCreateIfNotExists(): boolean; + /** + * Whether or not this dialect supports transactional DDL. + * +diff --git a/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.js b/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.js +index a8a950f..53c47b0 100644 +--- a/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.js ++++ b/node_modules/kysely/dist/cjs/dialect/dialect-adapter-base.js +@@ -8,6 +8,9 @@ exports.DialectAdapterBase = void 0; + * they are added and there will be less breaking changes. + */ + class DialectAdapterBase { ++ get supportsCreateIfNotExists() { ++ return true; ++ } + get supportsTransactionalDdl() { + return false; + } +diff --git a/node_modules/kysely/dist/cjs/dialect/dialect-adapter.d.ts b/node_modules/kysely/dist/cjs/dialect/dialect-adapter.d.ts +index 73a925a..fe7f1b3 100644 +--- a/node_modules/kysely/dist/cjs/dialect/dialect-adapter.d.ts ++++ b/node_modules/kysely/dist/cjs/dialect/dialect-adapter.d.ts +@@ -8,6 +8,14 @@ import { Kysely } from '../kysely.js'; + * it. For that there's a `supportsTransactionalDdl` boolean in this interface. + */ + export interface DialectAdapter { ++ /** ++ * Whether or not this dialect supports `if not exists` in creation of tables/schemas/views/etc. ++ * ++ * If this is false, Kysely's internal migrations tables and schemas are created ++ * without `if not exists` in migrations. This is not a problem if the dialect ++ * supports transactional DDL. ++ */ ++ readonly supportsCreateIfNotExists: boolean; + /** + * Whether or not this dialect supports transactional DDL. + * +diff --git a/node_modules/kysely/dist/cjs/dialect/postgres/postgres-driver.js b/node_modules/kysely/dist/cjs/dialect/postgres/postgres-driver.js +index 4f205f4..a67ea6f 100644 +--- a/node_modules/kysely/dist/cjs/dialect/postgres/postgres-driver.js ++++ b/node_modules/kysely/dist/cjs/dialect/postgres/postgres-driver.js +@@ -28,7 +28,7 @@ class PostgresDriver { + // The driver must take care of calling `onCreateConnection` when a new + // connection is created. The `pg` module doesn't provide an async hook + // for the connection creation. We need to call the method explicitly. +- if (this.#config?.onCreateConnection) { ++ if (this.#config.onCreateConnection) { + await this.#config.onCreateConnection(connection); + } + } +diff --git a/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts b/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +index 69a0a7d..550df53 100644 +--- a/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts ++++ b/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +@@ -1,7 +1,7 @@ + import { Kysely } from '../../kysely.js'; + import { DialectAdapterBase } from '../dialect-adapter-base.js'; + import { MigrationLockOptions } from '../dialect-adapter.js'; +-export declare class SqliteAdapter implements DialectAdapterBase { ++export declare class SqliteAdapter extends DialectAdapterBase { + /** + * Whether or not this dialect supports transactional DDL. + * +diff --git a/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.js b/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.js +index 78850a0..ef9f504 100644 +--- a/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.js ++++ b/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-adapter.js +@@ -1,7 +1,8 @@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.SqliteAdapter = void 0; +-class SqliteAdapter { ++const dialect_adapter_base_js_1 = require("../dialect-adapter-base.js"); ++class SqliteAdapter extends dialect_adapter_base_js_1.DialectAdapterBase { + get supportsTransactionalDdl() { + return false; + } +diff --git a/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts b/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +index 810af98..a873682 100644 +--- a/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts ++++ b/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +@@ -37,4 +37,5 @@ export interface SqliteStatement { + changes: number | bigint; + lastInsertRowid: number | bigint; + }; ++ iterate(parameters: ReadonlyArray): IterableIterator; + } +diff --git a/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-driver.js b/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-driver.js +index 13594af..99676cf 100644 +--- a/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-driver.js ++++ b/node_modules/kysely/dist/cjs/dialect/sqlite/sqlite-driver.js +@@ -1,6 +1,7 @@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.SqliteDriver = void 0; ++const select_query_node_js_1 = require("../../operation-node/select-query-node.js"); + const compiled_query_js_1 = require("../../query-compiler/compiled-query.js"); + const object_utils_js_1 = require("../../util/object-utils.js"); + class SqliteDriver { +@@ -70,8 +71,20 @@ class SqliteConnection { + }); + } + } +- async *streamQuery() { +- throw new Error("Sqlite driver doesn't support streaming"); ++ async *streamQuery(compiledQuery, _chunkSize) { ++ const { sql, parameters, query } = compiledQuery; ++ const stmt = this.#db.prepare(sql); ++ if (select_query_node_js_1.SelectQueryNode.is(query)) { ++ const iter = stmt.iterate(parameters); ++ for (const row of iter) { ++ yield { ++ rows: [row], ++ }; ++ } ++ } ++ else { ++ throw new Error('Sqlite driver only supports streaming of select queries'); ++ } + } + } + class ConnectionMutex { +diff --git a/node_modules/kysely/dist/cjs/driver/driver.d.ts b/node_modules/kysely/dist/cjs/driver/driver.d.ts +index 00babcb..11d2d55 100644 +--- a/node_modules/kysely/dist/cjs/driver/driver.d.ts ++++ b/node_modules/kysely/dist/cjs/driver/driver.d.ts +@@ -40,5 +40,5 @@ export interface Driver { + export interface TransactionSettings { + readonly isolationLevel?: IsolationLevel; + } +-export declare const TRANSACTION_ISOLATION_LEVELS: readonly ["read uncommitted", "read committed", "repeatable read", "serializable"]; ++export declare const TRANSACTION_ISOLATION_LEVELS: readonly ["read uncommitted", "read committed", "repeatable read", "serializable", "snapshot"]; + export type IsolationLevel = ArrayItemType; +diff --git a/node_modules/kysely/dist/cjs/driver/driver.js b/node_modules/kysely/dist/cjs/driver/driver.js +index 8acf3ea..80b9c33 100644 +--- a/node_modules/kysely/dist/cjs/driver/driver.js ++++ b/node_modules/kysely/dist/cjs/driver/driver.js +@@ -6,4 +6,5 @@ exports.TRANSACTION_ISOLATION_LEVELS = [ + 'read committed', + 'repeatable read', + 'serializable', ++ 'snapshot', + ]; +diff --git a/node_modules/kysely/dist/cjs/driver/single-connection-provider.js b/node_modules/kysely/dist/cjs/driver/single-connection-provider.js +index cf064c4..db6bca0 100644 +--- a/node_modules/kysely/dist/cjs/driver/single-connection-provider.js ++++ b/node_modules/kysely/dist/cjs/driver/single-connection-provider.js +@@ -1,6 +1,7 @@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.SingleConnectionProvider = void 0; ++const ignoreError = () => { }; + class SingleConnectionProvider { + #connection; + #runningPromise; +@@ -9,17 +10,15 @@ class SingleConnectionProvider { + } + async provideConnection(consumer) { + while (this.#runningPromise) { +- await this.#runningPromise; ++ await this.#runningPromise.catch(ignoreError); + } +- const promise = this.#run(consumer); +- this.#runningPromise = promise +- .then(() => { +- this.#runningPromise = undefined; +- }) +- .catch(() => { ++ // `#runningPromise` must be set to undefined before it's ++ // resolved or rejected. Otherwise the while loop above ++ // will misbehave. ++ this.#runningPromise = this.#run(consumer).finally(() => { + this.#runningPromise = undefined; + }); +- return promise; ++ return this.#runningPromise; + } + // Run the runner in an async function to make sure it doesn't + // throw synchronous errors. +diff --git a/node_modules/kysely/dist/cjs/expression/expression-builder.d.ts b/node_modules/kysely/dist/cjs/expression/expression-builder.d.ts +index 7b4a340..07933a1 100644 +--- a/node_modules/kysely/dist/cjs/expression/expression-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/expression/expression-builder.d.ts +@@ -14,6 +14,7 @@ import { JSONPathBuilder } from '../query-builder/json-path-builder.js'; + import { OperandExpression } from '../parser/expression-parser.js'; + import { CallbackSelection, SelectCallback, SelectExpression, Selection } from '../parser/select-parser.js'; + import { RefTuple2, RefTuple3, RefTuple4, RefTuple5, ValTuple2, ValTuple3, ValTuple4, ValTuple5 } from '../parser/tuple-parser.js'; ++import { Selectable } from '../util/column-type.js'; + export interface ExpressionBuilder { + /** + * Creates a binary expression. +@@ -344,6 +345,30 @@ export interface ExpressionBuilder { + */ + ref>(reference: RE): ExpressionWrapper>; + ref>(reference: RE, op: JSONOperatorWith$): JSONPathBuilder>; ++ /** ++ * Creates a table reference. ++ * ++ * ```ts ++ * db.selectFrom('person') ++ * .innerJoin('pet', 'pet.owner_id', 'person.id') ++ * .select(eb => [ ++ * 'person.id', ++ * sql`jsonb_agg(${eb.table('pet')})`.as('pets') ++ * ]) ++ * .groupBy('person.id') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * select "person"."id", jsonb_agg("pet") as "pets" ++ * from "person" ++ * inner join "pet" on "pet"."owner_id" = "person"."id" ++ * group by "person"."id" ++ * ``` ++ */ ++ table(table: T): ExpressionWrapper>; + /** + * Returns a value expression. + * +diff --git a/node_modules/kysely/dist/cjs/expression/expression-builder.js b/node_modules/kysely/dist/cjs/expression/expression-builder.js +index 172dfab..cdcef14 100644 +--- a/node_modules/kysely/dist/cjs/expression/expression-builder.js ++++ b/node_modules/kysely/dist/cjs/expression/expression-builder.js +@@ -60,8 +60,11 @@ function createExpressionBuilder(executor = noop_query_executor_js_1.NOOP_QUERY_ + } + return new json_path_builder_js_1.JSONPathBuilder((0, reference_parser_js_1.parseJSONReference)(reference, op)); + }, ++ table(table) { ++ return new expression_wrapper_js_1.ExpressionWrapper((0, table_parser_js_1.parseTable)(table)); ++ }, + val(value) { +- return new expression_wrapper_js_1.ExpressionWrapper((0, value_parser_js_1.parseValueExpressionOrList)(value)); ++ return new expression_wrapper_js_1.ExpressionWrapper((0, value_parser_js_1.parseValueExpression)(value)); + }, + refTuple(...values) { + return new expression_wrapper_js_1.ExpressionWrapper(tuple_node_js_1.TupleNode.create(values.map(reference_parser_js_1.parseReferenceExpression))); +diff --git a/node_modules/kysely/dist/cjs/index.d.ts b/node_modules/kysely/dist/cjs/index.d.ts +index cf166f8..37cf701 100644 +--- a/node_modules/kysely/dist/cjs/index.d.ts ++++ b/node_modules/kysely/dist/cjs/index.d.ts +@@ -72,6 +72,12 @@ export * from './dialect/postgres/postgres-dialect.js'; + export * from './dialect/sqlite/sqlite-query-compiler.js'; + export * from './dialect/sqlite/sqlite-introspector.js'; + export * from './dialect/sqlite/sqlite-adapter.js'; ++export * from './dialect/mssql/mssql-adapter.js'; ++export * from './dialect/mssql/mssql-dialect-config.js'; ++export * from './dialect/mssql/mssql-dialect.js'; ++export * from './dialect/mssql/mssql-driver.js'; ++export * from './dialect/mssql/mssql-introspector.js'; ++export * from './dialect/mssql/mssql-query-compiler.js'; + export * from './query-compiler/default-query-compiler.js'; + export * from './query-compiler/query-compiler.js'; + export * from './migration/migrator.js'; +@@ -176,7 +182,7 @@ export * from './util/compilable.js'; + export * from './util/explainable.js'; + export * from './util/streamable.js'; + export * from './util/log.js'; +-export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, Equals, UnknownRow, Simplify, SqlBool, } from './util/type-utils.js'; ++export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, Equals, UnknownRow, Simplify, SqlBool, Nullable, } from './util/type-utils.js'; + export * from './util/infer-result.js'; + export { logOnce } from './util/log-once.js'; + export { SelectExpression, SelectCallback, SelectArg, Selection, CallbackSelection, } from './parser/select-parser.js'; +diff --git a/node_modules/kysely/dist/cjs/index.js b/node_modules/kysely/dist/cjs/index.js +index a61ec58..714cbda 100644 +--- a/node_modules/kysely/dist/cjs/index.js ++++ b/node_modules/kysely/dist/cjs/index.js +@@ -90,6 +90,12 @@ __exportStar(require("./dialect/postgres/postgres-dialect.js"), exports); + __exportStar(require("./dialect/sqlite/sqlite-query-compiler.js"), exports); + __exportStar(require("./dialect/sqlite/sqlite-introspector.js"), exports); + __exportStar(require("./dialect/sqlite/sqlite-adapter.js"), exports); ++__exportStar(require("./dialect/mssql/mssql-adapter.js"), exports); ++__exportStar(require("./dialect/mssql/mssql-dialect-config.js"), exports); ++__exportStar(require("./dialect/mssql/mssql-dialect.js"), exports); ++__exportStar(require("./dialect/mssql/mssql-driver.js"), exports); ++__exportStar(require("./dialect/mssql/mssql-introspector.js"), exports); ++__exportStar(require("./dialect/mssql/mssql-query-compiler.js"), exports); + __exportStar(require("./query-compiler/default-query-compiler.js"), exports); + __exportStar(require("./query-compiler/query-compiler.js"), exports); + __exportStar(require("./migration/migrator.js"), exports); +diff --git a/node_modules/kysely/dist/cjs/kysely.d.ts b/node_modules/kysely/dist/cjs/kysely.d.ts +index 52e909a..8e45b8c 100644 +--- a/node_modules/kysely/dist/cjs/kysely.d.ts ++++ b/node_modules/kysely/dist/cjs/kysely.d.ts +@@ -66,7 +66,7 @@ export declare class Kysely extends QueryCreator implements QueryExecuto + /** + * Returns the {@link SchemaModule} module for building database schema. + */ +- get schema(): SchemaModule; ++ get schema(): SchemaModule; + /** + * Returns a the {@link DynamicModule} module. + * +diff --git a/node_modules/kysely/dist/cjs/migration/migrator.js b/node_modules/kysely/dist/cjs/migration/migrator.js +index 76f2d83..6f1c144 100644 +--- a/node_modules/kysely/dist/cjs/migration/migrator.js ++++ b/node_modules/kysely/dist/cjs/migration/migrator.js +@@ -220,10 +220,7 @@ class Migrator { + } + if (!(await this.#doesSchemaExists())) { + try { +- await this.#props.db.schema +- .createSchema(this.#migrationTableSchema) +- .ifNotExists() +- .execute(); ++ await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema)); + } + catch (error) { + // At least on PostgreSQL, `if not exists` doesn't guarantee the `create schema` +@@ -239,20 +236,15 @@ class Migrator { + if (!(await this.#doesTableExists(this.#migrationTable))) { + try { + if (this.#migrationTableSchema) { +- await this.#props.db.schema +- .createSchema(this.#migrationTableSchema) +- .ifNotExists() +- .execute(); ++ await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema)); + } +- await this.#props.db.schema ++ await this.#createIfNotExists(this.#props.db.schema + .withPlugin(this.#schemaPlugin) + .createTable(this.#migrationTable) +- .ifNotExists() + .addColumn('name', 'varchar(255)', (col) => col.notNull().primaryKey()) + // The migration run time as ISO string. This is not a real date type as we + // can't know which data type is supported by all future dialects. +- .addColumn('timestamp', 'varchar(255)', (col) => col.notNull()) +- .execute(); ++ .addColumn('timestamp', 'varchar(255)', (col) => col.notNull())); + } + catch (error) { + // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table` +@@ -267,13 +259,11 @@ class Migrator { + async #ensureMigrationLockTableExists() { + if (!(await this.#doesTableExists(this.#migrationLockTable))) { + try { +- await this.#props.db.schema ++ await this.#createIfNotExists(this.#props.db.schema + .withPlugin(this.#schemaPlugin) + .createTable(this.#migrationLockTable) +- .ifNotExists() + .addColumn('id', 'varchar(255)', (col) => col.notNull().primaryKey()) +- .addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0)) +- .execute(); ++ .addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0))); + } + catch (error) { + // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table` +@@ -481,6 +471,12 @@ class Migrator { + } + return { results }; + } ++ async #createIfNotExists(qb) { ++ if (this.#props.db.getExecutor().adapter.supportsCreateIfNotExists) { ++ qb = qb.ifNotExists(); ++ } ++ await qb.execute(); ++ } + } + exports.Migrator = Migrator; + class MigrationResultSetError extends Error { +diff --git a/node_modules/kysely/dist/cjs/operation-node/add-index-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/add-index-node.d.ts +new file mode 100644 +index 0000000..b81f95f +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/add-index-node.d.ts +@@ -0,0 +1,21 @@ ++import { IdentifierNode } from './identifier-node.js'; ++import { OperationNode } from './operation-node.js'; ++import { RawNode } from './raw-node.js'; ++export type AddIndexNodeProps = Omit; ++export interface AddIndexNode extends OperationNode { ++ readonly kind: 'AddIndexNode'; ++ readonly name: IdentifierNode; ++ readonly columns?: OperationNode[]; ++ readonly unique?: boolean; ++ readonly using?: RawNode; ++ readonly ifNotExists?: boolean; ++} ++/** ++ * @internal ++ */ ++export declare const AddIndexNode: Readonly<{ ++ is(node: OperationNode): node is AddIndexNode; ++ create(name: string): AddIndexNode; ++ cloneWith(node: AddIndexNode, props: AddIndexNodeProps): AddIndexNode; ++ cloneWithColumns(node: AddIndexNode, columns: OperationNode[]): AddIndexNode; ++}>; +diff --git a/node_modules/kysely/dist/cjs/operation-node/add-index-node.js b/node_modules/kysely/dist/cjs/operation-node/add-index-node.js +new file mode 100644 +index 0000000..0341e28 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/add-index-node.js +@@ -0,0 +1,31 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.AddIndexNode = void 0; ++const object_utils_js_1 = require("../util/object-utils.js"); ++const identifier_node_js_1 = require("./identifier-node.js"); ++/** ++ * @internal ++ */ ++exports.AddIndexNode = (0, object_utils_js_1.freeze)({ ++ is(node) { ++ return node.kind === 'AddIndexNode'; ++ }, ++ create(name) { ++ return (0, object_utils_js_1.freeze)({ ++ kind: 'AddIndexNode', ++ name: identifier_node_js_1.IdentifierNode.create(name) ++ }); ++ }, ++ cloneWith(node, props) { ++ return (0, object_utils_js_1.freeze)({ ++ ...node, ++ ...props, ++ }); ++ }, ++ cloneWithColumns(node, columns) { ++ return (0, object_utils_js_1.freeze)({ ++ ...node, ++ columns: [...(node.columns || []), ...columns], ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/cjs/operation-node/alter-table-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/alter-table-node.d.ts +index 5b03535..b09aca3 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/alter-table-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/alter-table-node.d.ts +@@ -8,7 +8,9 @@ import { AlterColumnNode } from './alter-column-node.js'; + import { AddConstraintNode } from './add-constraint-node.js'; + import { DropConstraintNode } from './drop-constraint-node.js'; + import { ModifyColumnNode } from './modify-column-node.js'; +-export type AlterTableNodeTableProps = Pick; ++import { DropIndexNode } from './drop-index-node.js'; ++import { AddIndexNode } from './add-index-node.js'; ++export type AlterTableNodeTableProps = Pick; + export type AlterTableColumnAlterationNode = RenameColumnNode | AddColumnNode | DropColumnNode | AlterColumnNode | ModifyColumnNode; + export interface AlterTableNode extends OperationNode { + readonly kind: 'AlterTableNode'; +@@ -18,6 +20,8 @@ export interface AlterTableNode extends OperationNode { + readonly columnAlterations?: ReadonlyArray; + readonly addConstraint?: AddConstraintNode; + readonly dropConstraint?: DropConstraintNode; ++ readonly addIndex?: AddIndexNode; ++ readonly dropIndex?: DropIndexNode; + } + /** + * @internal +diff --git a/node_modules/kysely/dist/cjs/operation-node/column-definition-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/column-definition-node.d.ts +index 6442d83..b518d35 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/column-definition-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/column-definition-node.d.ts +@@ -20,6 +20,7 @@ export interface ColumnDefinitionNode extends OperationNode { + readonly unsigned?: boolean; + readonly frontModifiers?: ReadonlyArray; + readonly endModifiers?: ReadonlyArray; ++ readonly nullsNotDistinct?: boolean; + } + /** + * @internal +diff --git a/node_modules/kysely/dist/cjs/operation-node/column-update-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/column-update-node.d.ts +index 2e8ab34..bb59937 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/column-update-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/column-update-node.d.ts +@@ -1,8 +1,7 @@ +-import { ColumnNode } from './column-node.js'; + import { OperationNode } from './operation-node.js'; + export interface ColumnUpdateNode extends OperationNode { + readonly kind: 'ColumnUpdateNode'; +- readonly column: ColumnNode; ++ readonly column: OperationNode; + readonly value: OperationNode; + } + /** +@@ -10,5 +9,5 @@ export interface ColumnUpdateNode extends OperationNode { + */ + export declare const ColumnUpdateNode: Readonly<{ + is(node: OperationNode): node is ColumnUpdateNode; +- create(column: ColumnNode, value: OperationNode): ColumnUpdateNode; ++ create(column: OperationNode, value: OperationNode): ColumnUpdateNode; + }>; +diff --git a/node_modules/kysely/dist/cjs/operation-node/create-index-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/create-index-node.d.ts +index a3a99d1..d474032 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/create-index-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/create-index-node.d.ts +@@ -14,6 +14,7 @@ export interface CreateIndexNode extends OperationNode { + readonly using?: RawNode; + readonly ifNotExists?: boolean; + readonly where?: WhereNode; ++ readonly nullsNotDistinct?: boolean; + } + /** + * @internal +diff --git a/node_modules/kysely/dist/cjs/operation-node/create-table-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/create-table-node.d.ts +index cc8ceda..f36036c 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/create-table-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/create-table-node.d.ts +@@ -16,6 +16,7 @@ export interface CreateTableNode extends OperationNode { + readonly onCommit?: OnCommitAction; + readonly frontModifiers?: ReadonlyArray; + readonly endModifiers?: ReadonlyArray; ++ readonly selectQuery?: OperationNode; + } + /** + * @internal +diff --git a/node_modules/kysely/dist/cjs/operation-node/create-trigger-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/create-trigger-node.d.ts +new file mode 100644 +index 0000000..8244954 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/create-trigger-node.d.ts +@@ -0,0 +1,34 @@ ++import { OperationNode } from './operation-node.js'; ++import { TableNode } from './table-node.js'; ++import { IdentifierNode } from './identifier-node.js'; ++import { QueryNode } from './query-node.js'; ++import { TriggerEventNode } from './trigger-event-node.js'; ++import { TriggerOrderNode } from './trigger-order-node.js'; ++import { FunctionNode } from './function-node.js'; ++export type TriggerTime = 'after' | 'before' | 'instead of'; ++export type CreateTriggerNodeParams = Omit; ++export interface CreateTriggerNode extends OperationNode { ++ readonly kind: 'CreateTriggerNode'; ++ readonly name: IdentifierNode; ++ readonly queries?: ReadonlyArray; ++ readonly function?: FunctionNode; ++ readonly time?: TriggerTime; ++ readonly events?: ReadonlyArray; ++ readonly table?: TableNode; ++ readonly orReplace?: boolean; ++ readonly ifNotExists?: boolean; ++ readonly when?: OperationNode; ++ readonly temporary?: boolean; ++ readonly forEach?: 'row' | 'statement'; ++ readonly order?: TriggerOrderNode; ++} ++/** ++ * @internal ++ */ ++export declare const CreateTriggerNode: Readonly<{ ++ is(node: OperationNode): node is CreateTriggerNode; ++ create(name: IdentifierNode): CreateTriggerNode; ++ cloneWithQuery(createTrigger: CreateTriggerNode, query: QueryNode): CreateTriggerNode; ++ cloneWithEvent(createTrigger: CreateTriggerNode, event: TriggerEventNode): CreateTriggerNode; ++ cloneWith(createTrigger: CreateTriggerNode, params: CreateTriggerNodeParams): CreateTriggerNode; ++}>; +diff --git a/node_modules/kysely/dist/cjs/operation-node/create-trigger-node.js b/node_modules/kysely/dist/cjs/operation-node/create-trigger-node.js +new file mode 100644 +index 0000000..47ba119 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/create-trigger-node.js +@@ -0,0 +1,36 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.CreateTriggerNode = void 0; ++const object_utils_js_1 = require("../util/object-utils.js"); ++/** ++ * @internal ++ */ ++exports.CreateTriggerNode = (0, object_utils_js_1.freeze)({ ++ is(node) { ++ return node.kind === 'CreateTriggerNode'; ++ }, ++ create(name) { ++ return (0, object_utils_js_1.freeze)({ ++ kind: 'CreateTriggerNode', ++ name, ++ }); ++ }, ++ cloneWithQuery(createTrigger, query) { ++ return (0, object_utils_js_1.freeze)({ ++ ...createTrigger, ++ queries: (0, object_utils_js_1.freeze)([...(createTrigger.queries || []), query]), ++ }); ++ }, ++ cloneWithEvent(createTrigger, event) { ++ return (0, object_utils_js_1.freeze)({ ++ ...createTrigger, ++ events: (0, object_utils_js_1.freeze)([...(createTrigger.events || []), event]), ++ }); ++ }, ++ cloneWith(createTrigger, params) { ++ return (0, object_utils_js_1.freeze)({ ++ ...createTrigger, ++ ...params, ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/cjs/operation-node/drop-trigger-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/drop-trigger-node.d.ts +new file mode 100644 +index 0000000..4e38772 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/drop-trigger-node.d.ts +@@ -0,0 +1,17 @@ ++import { OperationNode } from './operation-node.js'; ++import { SchemableIdentifierNode } from './schemable-identifier-node.js'; ++export type DropTriggerNodeParams = Omit, 'kind' | 'name'>; ++export interface DropTriggerNode extends OperationNode { ++ readonly kind: 'DropTriggerNode'; ++ readonly name: SchemableIdentifierNode; ++ readonly ifExists?: boolean; ++ readonly cascade?: boolean; ++} ++/** ++ * @internal ++ */ ++export declare const DropTriggerNode: Readonly<{ ++ is(node: OperationNode): node is DropTriggerNode; ++ create(name: SchemableIdentifierNode): DropTriggerNode; ++ cloneWith(dropTrigger: DropTriggerNode, params: DropTriggerNodeParams): DropTriggerNode; ++}>; +diff --git a/node_modules/kysely/dist/cjs/operation-node/drop-trigger-node.js b/node_modules/kysely/dist/cjs/operation-node/drop-trigger-node.js +new file mode 100644 +index 0000000..2bb067e +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/drop-trigger-node.js +@@ -0,0 +1,24 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.DropTriggerNode = void 0; ++const object_utils_js_1 = require("../util/object-utils.js"); ++/** ++ * @internal ++ */ ++exports.DropTriggerNode = (0, object_utils_js_1.freeze)({ ++ is(node) { ++ return node.kind === 'DropTriggerNode'; ++ }, ++ create(name) { ++ return (0, object_utils_js_1.freeze)({ ++ kind: 'DropTriggerNode', ++ name, ++ }); ++ }, ++ cloneWith(dropTrigger, params) { ++ return (0, object_utils_js_1.freeze)({ ++ ...dropTrigger, ++ ...params, ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.d.ts b/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.d.ts +index 6b3a13c..5d7fd9d 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.d.ts +@@ -85,6 +85,11 @@ import { JSONPathNode } from './json-path-node.js'; + import { JSONPathLegNode } from './json-path-leg-node.js'; + import { JSONOperatorChainNode } from './json-operator-chain-node.js'; + import { TupleNode } from './tuple-node.js'; ++import { AddIndexNode } from './add-index-node.js'; ++import { CreateTriggerNode } from './create-trigger-node.js'; ++import { DropTriggerNode } from './drop-trigger-node.js'; ++import { TriggerEventNode } from './trigger-event-node.js'; ++import { TriggerOrderNode } from './trigger-order-node.js'; + /** + * Transforms an operation node tree into another one. + * +@@ -139,9 +144,13 @@ export declare class OperationNodeTransformer { + protected transformDeleteQuery(node: DeleteQueryNode): DeleteQueryNode; + protected transformReturning(node: ReturningNode): ReturningNode; + protected transformCreateTable(node: CreateTableNode): CreateTableNode; ++ protected transformCreateTrigger(node: CreateTriggerNode): CreateTriggerNode; ++ protected transformTriggerEvent(node: TriggerEventNode): TriggerEventNode; ++ protected transformTriggerOrder(node: TriggerOrderNode): TriggerOrderNode; + protected transformColumnDefinition(node: ColumnDefinitionNode): ColumnDefinitionNode; + protected transformAddColumn(node: AddColumnNode): AddColumnNode; + protected transformDropTable(node: DropTableNode): DropTableNode; ++ protected transformDropTrigger(node: DropTriggerNode): DropTriggerNode; + protected transformOrderBy(node: OrderByNode): OrderByNode; + protected transformOrderByItem(node: OrderByItemNode): OrderByItemNode; + protected transformGroupBy(node: GroupByNode): GroupByNode; +@@ -199,6 +208,7 @@ export declare class OperationNodeTransformer { + protected transformJSONPathLeg(node: JSONPathLegNode): JSONPathLegNode; + protected transformJSONOperatorChain(node: JSONOperatorChainNode): JSONOperatorChainNode; + protected transformTuple(node: TupleNode): TupleNode; ++ protected transformAddIndex(node: AddIndexNode): AddIndexNode; + protected transformDataType(node: DataTypeNode): DataTypeNode; + protected transformSelectAll(node: SelectAllNode): SelectAllNode; + protected transformIdentifier(node: IdentifierNode): IdentifierNode; +diff --git a/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.js b/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.js +index bc3d0a4..839914f 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.js ++++ b/node_modules/kysely/dist/cjs/operation-node/operation-node-transformer.js +@@ -121,6 +121,11 @@ class OperationNodeTransformer { + JSONPathLegNode: this.transformJSONPathLeg.bind(this), + JSONOperatorChainNode: this.transformJSONOperatorChain.bind(this), + TupleNode: this.transformTuple.bind(this), ++ AddIndexNode: this.transformAddIndex.bind(this), ++ CreateTriggerNode: this.transformCreateTrigger.bind(this), ++ TriggerEventNode: this.transformTriggerEvent.bind(this), ++ TriggerOrderNode: this.transformTriggerOrder.bind(this), ++ DropTriggerNode: this.transformDropTrigger.bind(this), + }); + transformNode(node) { + if (!node) { +@@ -297,6 +302,38 @@ class OperationNodeTransformer { + onCommit: node.onCommit, + frontModifiers: this.transformNodeList(node.frontModifiers), + endModifiers: this.transformNodeList(node.endModifiers), ++ selectQuery: this.transformNode(node.selectQuery), ++ }); ++ } ++ transformCreateTrigger(node) { ++ return (0, require_all_props_js_1.requireAllProps)({ ++ kind: 'CreateTriggerNode', ++ name: this.transformNode(node.name), ++ table: this.transformNode(node.table), ++ ifNotExists: node.ifNotExists, ++ time: node.time, ++ events: this.transformNodeList(node.events), ++ forEach: node.forEach, ++ orReplace: node.orReplace, ++ temporary: node.temporary, ++ queries: this.transformNodeList(node.queries), ++ function: this.transformNode(node.function), ++ when: this.transformNode(node.when), ++ order: this.transformNode(node.order), ++ }); ++ } ++ transformTriggerEvent(node) { ++ return (0, require_all_props_js_1.requireAllProps)({ ++ kind: 'TriggerEventNode', ++ event: node.event, ++ columns: this.transformNodeList(node.columns), ++ }); ++ } ++ transformTriggerOrder(node) { ++ return (0, require_all_props_js_1.requireAllProps)({ ++ kind: 'TriggerOrderNode', ++ order: node.order, ++ otherTriggerName: this.transformNode(node.otherTriggerName), + }); + } + transformColumnDefinition(node) { +@@ -315,6 +352,7 @@ class OperationNodeTransformer { + generated: this.transformNode(node.generated), + frontModifiers: this.transformNodeList(node.frontModifiers), + endModifiers: this.transformNodeList(node.endModifiers), ++ nullsNotDistinct: node.nullsNotDistinct, + }); + } + transformAddColumn(node) { +@@ -331,6 +369,14 @@ class OperationNodeTransformer { + cascade: node.cascade, + }); + } ++ transformDropTrigger(node) { ++ return (0, require_all_props_js_1.requireAllProps)({ ++ kind: 'DropTriggerNode', ++ name: this.transformNode(node.name), ++ ifExists: node.ifExists, ++ cascade: node.cascade, ++ }); ++ } + transformOrderBy(node) { + return (0, require_all_props_js_1.requireAllProps)({ + kind: 'OrderByNode', +@@ -416,6 +462,7 @@ class OperationNodeTransformer { + using: this.transformNode(node.using), + ifNotExists: node.ifNotExists, + where: this.transformNode(node.where), ++ nullsNotDistinct: node.nullsNotDistinct, + }); + } + transformList(node) { +@@ -445,6 +492,7 @@ class OperationNodeTransformer { + kind: 'UniqueConstraintNode', + columns: this.transformNodeList(node.columns), + name: this.transformNode(node.name), ++ nullsNotDistinct: node.nullsNotDistinct, + }); + } + transformForeignKeyConstraint(node) { +@@ -533,6 +581,8 @@ class OperationNodeTransformer { + columnAlterations: this.transformNodeList(node.columnAlterations), + addConstraint: this.transformNode(node.addConstraint), + dropConstraint: this.transformNode(node.dropConstraint), ++ addIndex: this.transformNode(node.addIndex), ++ dropIndex: this.transformNode(node.dropIndex), + }); + } + transformDropColumn(node) { +@@ -765,6 +815,16 @@ class OperationNodeTransformer { + values: this.transformNodeList(node.values), + }); + } ++ transformAddIndex(node) { ++ return (0, require_all_props_js_1.requireAllProps)({ ++ kind: 'AddIndexNode', ++ name: this.transformNode(node.name), ++ columns: this.transformNodeList(node.columns), ++ unique: node.unique, ++ using: this.transformNode(node.using), ++ ifNotExists: node.ifNotExists, ++ }); ++ } + transformDataType(node) { + // An Object.freezed leaf node. No need to clone. + return node; +diff --git a/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.d.ts b/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.d.ts +index 7c267cd..6a66bc7 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.d.ts +@@ -85,6 +85,11 @@ import { JSONPathNode } from './json-path-node.js'; + import { JSONPathLegNode } from './json-path-leg-node.js'; + import { JSONOperatorChainNode } from './json-operator-chain-node.js'; + import { TupleNode } from './tuple-node.js'; ++import { AddIndexNode } from './add-index-node.js'; ++import { CreateTriggerNode } from './create-trigger-node.js'; ++import { DropTriggerNode } from './drop-trigger-node.js'; ++import { TriggerEventNode } from './trigger-event-node.js'; ++import { TriggerOrderNode } from './trigger-order-node.js'; + export declare abstract class OperationNodeVisitor { + #private; + protected readonly nodeStack: OperationNode[]; +@@ -108,9 +113,13 @@ export declare abstract class OperationNodeVisitor { + protected abstract visitDeleteQuery(node: DeleteQueryNode): void; + protected abstract visitReturning(node: ReturningNode): void; + protected abstract visitCreateTable(node: CreateTableNode): void; ++ protected abstract visitCreateTrigger(node: CreateTriggerNode): void; ++ protected abstract visitTriggerEvent(node: TriggerEventNode): void; ++ protected abstract visitTriggerOrder(node: TriggerOrderNode): void; + protected abstract visitAddColumn(node: AddColumnNode): void; + protected abstract visitColumnDefinition(node: ColumnDefinitionNode): void; + protected abstract visitDropTable(node: DropTableNode): void; ++ protected abstract visitDropTrigger(node: DropTriggerNode): void; + protected abstract visitOrderBy(node: OrderByNode): void; + protected abstract visitOrderByItem(node: OrderByItemNode): void; + protected abstract visitGroupBy(node: GroupByNode): void; +@@ -176,4 +185,5 @@ export declare abstract class OperationNodeVisitor { + protected abstract visitJSONPathLeg(node: JSONPathLegNode): void; + protected abstract visitJSONOperatorChain(node: JSONOperatorChainNode): void; + protected abstract visitTuple(node: TupleNode): void; ++ protected abstract visitAddIndex(node: AddIndexNode): void; + } +diff --git a/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.js b/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.js +index 8a50e0b..acc4d6e 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.js ++++ b/node_modules/kysely/dist/cjs/operation-node/operation-node-visitor.js +@@ -94,6 +94,11 @@ class OperationNodeVisitor { + JSONPathLegNode: this.visitJSONPathLeg.bind(this), + JSONOperatorChainNode: this.visitJSONOperatorChain.bind(this), + TupleNode: this.visitTuple.bind(this), ++ AddIndexNode: this.visitAddIndex.bind(this), ++ CreateTriggerNode: this.visitCreateTrigger.bind(this), ++ TriggerEventNode: this.visitTriggerEvent.bind(this), ++ TriggerOrderNode: this.visitTriggerOrder.bind(this), ++ DropTriggerNode: this.visitDropTrigger.bind(this), + }); + visitNode = (node) => { + this.nodeStack.push(node); +diff --git a/node_modules/kysely/dist/cjs/operation-node/operation-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/operation-node.d.ts +index 24cad68..a01b9ed 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/operation-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/operation-node.d.ts +@@ -1,4 +1,4 @@ +-export type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode' | 'AggregateFunctionNode' | 'OverNode' | 'PartitionByNode' | 'PartitionByItemNode' | 'SetOperationNode' | 'BinaryOperationNode' | 'UnaryOperationNode' | 'UsingNode' | 'FunctionNode' | 'CaseNode' | 'WhenNode' | 'JSONReferenceNode' | 'JSONPathNode' | 'JSONPathLegNode' | 'JSONOperatorChainNode' | 'TupleNode'; ++export type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode' | 'AggregateFunctionNode' | 'OverNode' | 'PartitionByNode' | 'PartitionByItemNode' | 'SetOperationNode' | 'BinaryOperationNode' | 'UnaryOperationNode' | 'UsingNode' | 'FunctionNode' | 'CaseNode' | 'WhenNode' | 'JSONReferenceNode' | 'JSONPathNode' | 'JSONPathLegNode' | 'JSONOperatorChainNode' | 'TupleNode' | 'AddIndexNode' | 'CreateTriggerNode' | 'TriggerEventNode' | 'TriggerOrderNode' | 'DropTriggerNode'; + export interface OperationNode { + readonly kind: OperationNodeKind; + } +diff --git a/node_modules/kysely/dist/cjs/operation-node/operator-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/operator-node.d.ts +index 1076866..18b6e05 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/operator-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/operator-node.d.ts +@@ -1,11 +1,11 @@ + import { OperationNode } from './operation-node.js'; +-export declare const COMPARISON_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp"]; ++export declare const COMPARISON_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from"]; + export declare const ARITHMETIC_OPERATORS: readonly ["+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>"]; + export declare const JSON_OPERATORS: readonly ["->", "->>"]; +-export declare const BINARY_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"]; ++export declare const BINARY_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"]; + export declare const UNARY_FILTER_OPERATORS: readonly ["exists", "not exists"]; + export declare const UNARY_OPERATORS: readonly ["not", "-", "exists", "not exists"]; +-export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "not", "-", "exists", "not exists", "between", "between symmetric"]; ++export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "not", "-", "exists", "not exists", "between", "between symmetric"]; + export type ComparisonOperator = (typeof COMPARISON_OPERATORS)[number]; + export type ArithmeticOperator = (typeof ARITHMETIC_OPERATORS)[number]; + export type JSONOperator = (typeof JSON_OPERATORS)[number]; +diff --git a/node_modules/kysely/dist/cjs/operation-node/operator-node.js b/node_modules/kysely/dist/cjs/operation-node/operator-node.js +index 1b4ff0a..5407a85 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/operator-node.js ++++ b/node_modules/kysely/dist/cjs/operation-node/operator-node.js +@@ -37,6 +37,8 @@ exports.COMPARISON_OPERATORS = [ + '!!', + '<->', + 'regexp', ++ 'is distinct from', ++ 'is not distinct from', + ]; + exports.ARITHMETIC_OPERATORS = [ + '+', +diff --git a/node_modules/kysely/dist/cjs/operation-node/trigger-event-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/trigger-event-node.d.ts +new file mode 100644 +index 0000000..8a3677d +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/trigger-event-node.d.ts +@@ -0,0 +1,15 @@ ++import { OperationNode } from './operation-node.js'; ++export type TriggerEvent = 'delete' | 'update' | 'insert' | 'truncate'; ++export type TriggerEventNodeParams = Omit; ++export interface TriggerEventNode extends OperationNode { ++ readonly kind: 'TriggerEventNode'; ++ readonly event: TriggerEvent; ++ readonly columns?: ReadonlyArray; ++} ++/** ++ * @internal ++ */ ++export declare const TriggerEventNode: Readonly<{ ++ is(node: OperationNode): node is TriggerEventNode; ++ create(event: TriggerEvent, columns?: ReadonlyArray): TriggerEventNode; ++}>; +diff --git a/node_modules/kysely/dist/cjs/operation-node/trigger-event-node.js b/node_modules/kysely/dist/cjs/operation-node/trigger-event-node.js +new file mode 100644 +index 0000000..85f3975 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/trigger-event-node.js +@@ -0,0 +1,19 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.TriggerEventNode = void 0; ++const object_utils_js_1 = require("../util/object-utils.js"); ++/** ++ * @internal ++ */ ++exports.TriggerEventNode = (0, object_utils_js_1.freeze)({ ++ is(node) { ++ return node.kind === 'TriggerEventNode'; ++ }, ++ create(event, columns) { ++ return (0, object_utils_js_1.freeze)({ ++ kind: 'TriggerEventNode', ++ event, ++ columns, ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/cjs/operation-node/trigger-order-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/trigger-order-node.d.ts +new file mode 100644 +index 0000000..12bad8d +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/trigger-order-node.d.ts +@@ -0,0 +1,16 @@ ++import { IdentifierNode } from './identifier-node.js'; ++import { OperationNode } from './operation-node.js'; ++export type TriggerOrder = 'follows' | 'precedes'; ++export type TriggerOrderNodeParams = Omit; ++export interface TriggerOrderNode extends OperationNode { ++ readonly kind: 'TriggerOrderNode'; ++ readonly order: TriggerOrder; ++ readonly otherTriggerName: IdentifierNode; ++} ++/** ++ * @internal ++ */ ++export declare const TriggerOrderNode: Readonly<{ ++ is(node: OperationNode): node is TriggerOrderNode; ++ create(order: TriggerOrder, otherTriggerName: IdentifierNode): TriggerOrderNode; ++}>; +diff --git a/node_modules/kysely/dist/cjs/operation-node/trigger-order-node.js b/node_modules/kysely/dist/cjs/operation-node/trigger-order-node.js +new file mode 100644 +index 0000000..2b40780 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/operation-node/trigger-order-node.js +@@ -0,0 +1,19 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.TriggerOrderNode = void 0; ++const object_utils_js_1 = require("../util/object-utils.js"); ++/** ++ * @internal ++ */ ++exports.TriggerOrderNode = (0, object_utils_js_1.freeze)({ ++ is(node) { ++ return node.kind === 'TriggerOrderNode'; ++ }, ++ create(order, otherTriggerName) { ++ return (0, object_utils_js_1.freeze)({ ++ kind: 'TriggerOrderNode', ++ order, ++ otherTriggerName, ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.d.ts b/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.d.ts +index c179f1f..4a544de 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.d.ts ++++ b/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.d.ts +@@ -5,11 +5,14 @@ export interface UniqueConstraintNode extends OperationNode { + readonly kind: 'UniqueConstraintNode'; + readonly columns: ReadonlyArray; + readonly name?: IdentifierNode; ++ readonly nullsNotDistinct?: boolean; + } ++export type UniqueConstraintNodeProps = Omit, 'kind'>; + /** + * @internal + */ + export declare const UniqueConstraintNode: Readonly<{ + is(node: OperationNode): node is UniqueConstraintNode; +- create(columns: string[], constraintName?: string): UniqueConstraintNode; ++ create(columns: string[], constraintName?: string, nullsNotDistinct?: boolean): UniqueConstraintNode; ++ cloneWith(node: UniqueConstraintNode, props: UniqueConstraintNodeProps): UniqueConstraintNode; + }>; +diff --git a/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.js b/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.js +index d615f74..ba9b265 100644 +--- a/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.js ++++ b/node_modules/kysely/dist/cjs/operation-node/unique-constraint-node.js +@@ -11,11 +11,18 @@ exports.UniqueConstraintNode = (0, object_utils_js_1.freeze)({ + is(node) { + return node.kind === 'UniqueConstraintNode'; + }, +- create(columns, constraintName) { ++ create(columns, constraintName, nullsNotDistinct) { + return (0, object_utils_js_1.freeze)({ + kind: 'UniqueConstraintNode', + columns: (0, object_utils_js_1.freeze)(columns.map(column_node_js_1.ColumnNode.create)), + name: constraintName ? identifier_node_js_1.IdentifierNode.create(constraintName) : undefined, ++ nullsNotDistinct, ++ }); ++ }, ++ cloneWith(node, props) { ++ return (0, object_utils_js_1.freeze)({ ++ ...node, ++ ...props, + }); + }, + }); +diff --git a/node_modules/kysely/dist/cjs/parser/binary-operation-parser.js b/node_modules/kysely/dist/cjs/parser/binary-operation-parser.js +index 2ebff87..b5e9a08 100644 +--- a/node_modules/kysely/dist/cjs/parser/binary-operation-parser.js ++++ b/node_modules/kysely/dist/cjs/parser/binary-operation-parser.js +@@ -41,7 +41,7 @@ exports.parseFilterObject = parseFilterObject; + function parseFilterList(list, combinator) { + const combine = combinator === 'and' ? and_node_js_1.AndNode.create : or_node_js_1.OrNode.create; + if (list.length === 0) { +- return value_node_js_1.ValueNode.createImmediate(combinator === 'and'); ++ return binary_operation_node_js_1.BinaryOperationNode.create(value_node_js_1.ValueNode.createImmediate(1), operator_node_js_1.OperatorNode.create('='), value_node_js_1.ValueNode.createImmediate(combinator === 'and' ? 1 : 0)); + } + let node = toOperationNode(list[0]); + for (let i = 1; i < list.length; ++i) { +diff --git a/node_modules/kysely/dist/cjs/parser/reference-parser.d.ts b/node_modules/kysely/dist/cjs/parser/reference-parser.d.ts +index cd4d656..08204c7 100644 +--- a/node_modules/kysely/dist/cjs/parser/reference-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/reference-parser.d.ts +@@ -16,7 +16,8 @@ export type StringReference = AnyColumn | AnyCo + export type SimpleReferenceExpression = StringReference | DynamicReferenceBuilder; + export type ReferenceExpression = SimpleReferenceExpression | ExpressionOrFactory; + export type ReferenceExpressionOrList = ReferenceExpression | ReadonlyArray>; +-export type ExtractTypeFromReferenceExpression = RE extends string ? SelectType> : RE extends SelectQueryBuilderExpression ? O[keyof O] | null : RE extends (qb: any) => SelectQueryBuilderExpression ? O[keyof O] | null : RE extends Expression ? O : RE extends (qb: any) => Expression ? O : DV; ++export type ExtractTypeFromReferenceExpression = SelectType>; ++export type ExtractRawTypeFromReferenceExpression = RE extends string ? ExtractTypeFromStringReference : RE extends SelectQueryBuilderExpression ? O[keyof O] | null : RE extends (qb: any) => SelectQueryBuilderExpression ? O[keyof O] | null : RE extends Expression ? O : RE extends (qb: any) => Expression ? O : DV; + export type ExtractTypeFromStringReference = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends AnyColumn ? ExtractColumnType : DV; + export type OrderedColumnName = C extends `${string} ${infer O}` ? O extends OrderByDirection ? C : never : C; + export type ExtractColumnNameFromOrderedColumnName = C extends `${infer CL} ${infer O}` ? O extends OrderByDirection ? CL : never : C; +diff --git a/node_modules/kysely/dist/cjs/parser/update-set-parser.d.ts b/node_modules/kysely/dist/cjs/parser/update-set-parser.d.ts +index d4b2dd0..2763b7c 100644 +--- a/node_modules/kysely/dist/cjs/parser/update-set-parser.d.ts ++++ b/node_modules/kysely/dist/cjs/parser/update-set-parser.d.ts +@@ -2,9 +2,12 @@ import { ColumnUpdateNode } from '../operation-node/column-update-node.js'; + import { ExpressionBuilder } from '../expression/expression-builder.js'; + import { UpdateKeys, UpdateType } from '../util/column-type.js'; + import { ValueExpression } from './value-parser.js'; ++import { ExtractRawTypeFromReferenceExpression, ReferenceExpression } from './reference-parser.js'; + export type UpdateObject = { + [C in UpdateKeys]?: ValueExpression> | undefined; + }; + export type UpdateObjectFactory = (eb: ExpressionBuilder) => UpdateObject; +-export type UpdateExpression = UpdateObject | UpdateObjectFactory; +-export declare function parseUpdateExpression(update: UpdateExpression): ReadonlyArray; ++export type UpdateObjectExpression = UpdateObject | UpdateObjectFactory; ++export type ExtractUpdateTypeFromReferenceExpression = UpdateType>; ++export declare function parseUpdate(...args: [UpdateObjectExpression] | [ReferenceExpression, ValueExpression]): ReadonlyArray; ++export declare function parseUpdateObjectExpression(update: UpdateObjectExpression): ReadonlyArray; +diff --git a/node_modules/kysely/dist/cjs/parser/update-set-parser.js b/node_modules/kysely/dist/cjs/parser/update-set-parser.js +index bbb1618..e741a9e 100644 +--- a/node_modules/kysely/dist/cjs/parser/update-set-parser.js ++++ b/node_modules/kysely/dist/cjs/parser/update-set-parser.js +@@ -1,12 +1,22 @@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); +-exports.parseUpdateExpression = void 0; ++exports.parseUpdateObjectExpression = exports.parseUpdate = void 0; + const column_node_js_1 = require("../operation-node/column-node.js"); + const column_update_node_js_1 = require("../operation-node/column-update-node.js"); + const expression_builder_js_1 = require("../expression/expression-builder.js"); + const object_utils_js_1 = require("../util/object-utils.js"); + const value_parser_js_1 = require("./value-parser.js"); +-function parseUpdateExpression(update) { ++const reference_parser_js_1 = require("./reference-parser.js"); ++function parseUpdate(...args) { ++ if (args.length === 2) { ++ return [ ++ column_update_node_js_1.ColumnUpdateNode.create((0, reference_parser_js_1.parseReferenceExpression)(args[0]), (0, value_parser_js_1.parseValueExpression)(args[1])), ++ ]; ++ } ++ return parseUpdateObjectExpression(args[0]); ++} ++exports.parseUpdate = parseUpdate; ++function parseUpdateObjectExpression(update) { + const updateObj = (0, object_utils_js_1.isFunction)(update) ? update((0, expression_builder_js_1.expressionBuilder)()) : update; + return Object.entries(updateObj) + .filter(([_, value]) => value !== undefined) +@@ -14,4 +24,4 @@ function parseUpdateExpression(update) { + return column_update_node_js_1.ColumnUpdateNode.create(column_node_js_1.ColumnNode.create(key), (0, value_parser_js_1.parseValueExpression)(value)); + }); + } +-exports.parseUpdateExpression = parseUpdateExpression; ++exports.parseUpdateObjectExpression = parseUpdateObjectExpression; +diff --git a/node_modules/kysely/dist/cjs/plugin/with-schema/with-schema-transformer.js b/node_modules/kysely/dist/cjs/plugin/with-schema/with-schema-transformer.js +index 4b3caa6..97287a4 100644 +--- a/node_modules/kysely/dist/cjs/plugin/with-schema/with-schema-transformer.js ++++ b/node_modules/kysely/dist/cjs/plugin/with-schema/with-schema-transformer.js +@@ -19,12 +19,14 @@ const ROOT_OPERATION_NODES = (0, object_utils_js_1.freeze)({ + CreateTableNode: true, + CreateTypeNode: true, + CreateViewNode: true, ++ CreateTriggerNode: true, + DeleteQueryNode: true, + DropIndexNode: true, + DropSchemaNode: true, + DropTableNode: true, + DropTypeNode: true, + DropViewNode: true, ++ DropTriggerNode: true, + InsertQueryNode: true, + RawNode: true, + SelectQueryNode: true, +diff --git a/node_modules/kysely/dist/cjs/query-builder/function-module.d.ts b/node_modules/kysely/dist/cjs/query-builder/function-module.d.ts +index 592c5e9..8f326c1 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/function-module.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/function-module.d.ts +@@ -7,6 +7,7 @@ import { KyselyTypeError } from '../util/type-error.js'; + import { Equals, IsAny } from '../util/type-utils.js'; + import { AggregateFunctionBuilder } from './aggregate-function-builder.js'; + import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js'; ++import { Selectable } from '../util/column-type.js'; + /** + * Helpers for type safe SQL function calls. + * +@@ -17,21 +18,47 @@ import { SelectQueryBuilderExpression } from '../query-builder/select-query-buil + * + * + * +- * This example uses the `fn` module to select some aggregates: ++ * This example shows how to create function calls. These examples also work in any ++ * other place (`where` calls, updates, inserts etc.). The only difference is that you ++ * leave out the alias (the `as` call) if you use these in any other place than `select`. + * + * ```ts ++ * import { sql } from 'kysely' ++ * + * const result = await db.selectFrom('person') + * .innerJoin('pet', 'pet.owner_id', 'person.id') +- * .select(({ fn }) => [ ++ * .select(({ fn, val, ref }) => [ + * 'person.id', + * + * // The `fn` module contains the most common + * // functions. + * fn.count('pet.id').as('pet_count'), + * +- * // You can call any function using the +- * // `agg` method +- * fn.agg('array_agg', ['pet.name']).as('pet_names') ++ * // You can call any function by calling `fn` ++ * // directly. The arguments are treated as column ++ * // references by default. If you want to pass in ++ * // values, use the `val` function. ++ * fn('concat', [ ++ * val('Ms. '), ++ * 'first_name', ++ * val(' '), ++ * 'last_name' ++ * ]).as('full_name_with_title'), ++ * ++ * // You can call any aggregate function using the ++ * // `fn.agg` function. ++ * fn.agg('array_agg', ['pet.name']).as('pet_names'), ++ * ++ * // And once again, you can use the `sql` ++ * // template tag. The template tag substitutions ++ * // are treated as values by default. If you want ++ * // to reference columns, you can use the `ref` ++ * // function. ++ * sql`concat( ++ * ${ref('first_name')}, ++ * ' ', ++ * ${ref('last_name')} ++ * )`.as('full_name') + * ]) + * .groupBy('person.id') + * .having((eb) => eb.fn.count('pet.id'), '>', 10) +@@ -44,11 +71,13 @@ import { SelectQueryBuilderExpression } from '../query-builder/select-query-buil + * select + * "person"."id", + * count("pet"."id") as "pet_count", +- * array_agg("pet"."name") as "pet_names" ++ * concat($1, "first_name", $2, "last_name") as "full_name_with_title", ++ * array_agg("pet"."name") as "pet_names", ++ * concat("first_name", ' ', "last_name") as "full_name" + * from "person" + * inner join "pet" on "pet"."owner_id" = "person"."id" + * group by "person"."id" +- * having count("pet"."id") > $1 ++ * having count("pet"."id") > $3 + * ``` + */ + export interface FunctionModule { +@@ -540,6 +569,50 @@ export interface FunctionModule { + any>(expr: RE): Exclude, null> extends ReadonlyArray ? ExpressionWrapper : KyselyTypeError<'any(expr) call failed: expr must be an array'>; + any(subquery: SelectQueryBuilderExpression>): ExpressionWrapper; + any(expr: Expression>): ExpressionWrapper; ++ /** ++ * Creates a json_agg function call. ++ * ++ * This function is only available on PostgreSQL. ++ * ++ * ```ts ++ * db.selectFrom('person') ++ * .innerJoin('pet', 'pet.owner_id', 'person.id') ++ * .select((eb) => ['first_name', eb.fn.jsonAgg('pet').as('pets')]) ++ * .groupBy('person.first_name') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * select "first_name", json_agg("pet") as "pets" ++ * from "person" ++ * inner join "pet" on "pet"."owner_id" = "person"."id" ++ * group by "person"."first_name" ++ * ``` ++ */ ++ jsonAgg>(table: T): AggregateFunctionBuilder[] : T extends Expression ? O[] : never>; ++ /** ++ * Creates a to_json function call. ++ * ++ * This function is only available on PostgreSQL. ++ * ++ * ```ts ++ * db.selectFrom('person') ++ * .innerJoin('pet', 'pet.owner_id', 'person.id') ++ * .select((eb) => ['first_name', eb.fn.toJson('pet').as('pet')]) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * select "first_name", to_json("pet") as "pet" ++ * from "person" ++ * inner join "pet" on "pet"."owner_id" = "person"."id" ++ * ``` ++ */ ++ toJson>(table: T): ExpressionWrapper : T extends Expression ? O : never>; + } + export declare function createFunctionModule(): FunctionModule; + type OutputBoundStringReference, O> = IsAny extends true ? C : Equals | null, O | null> extends true ? C : never; +diff --git a/node_modules/kysely/dist/cjs/query-builder/function-module.js b/node_modules/kysely/dist/cjs/query-builder/function-module.js +index b894b62..01a2a51 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/function-module.js ++++ b/node_modules/kysely/dist/cjs/query-builder/function-module.js +@@ -7,6 +7,8 @@ const function_node_js_1 = require("../operation-node/function-node.js"); + const reference_parser_js_1 = require("../parser/reference-parser.js"); + const select_parser_js_1 = require("../parser/select-parser.js"); + const aggregate_function_builder_js_1 = require("./aggregate-function-builder.js"); ++const object_utils_js_1 = require("../util/object-utils.js"); ++const table_parser_js_1 = require("../parser/table-parser.js"); + function createFunctionModule() { + const fn = (name, args) => { + return new expression_wrapper_js_1.ExpressionWrapper(function_node_js_1.FunctionNode.create(name, (0, reference_parser_js_1.parseReferenceExpressionOrList)(args))); +@@ -44,6 +46,18 @@ function createFunctionModule() { + any(column) { + return fn('any', [column]); + }, ++ jsonAgg(table) { ++ return new aggregate_function_builder_js_1.AggregateFunctionBuilder({ ++ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('json_agg', [ ++ (0, object_utils_js_1.isString)(table) ? (0, table_parser_js_1.parseTable)(table) : table.toOperationNode(), ++ ]), ++ }); ++ }, ++ toJson(table) { ++ return new expression_wrapper_js_1.ExpressionWrapper(function_node_js_1.FunctionNode.create('to_json', [ ++ (0, object_utils_js_1.isString)(table) ? (0, table_parser_js_1.parseTable)(table) : table.toOperationNode(), ++ ])); ++ }, + }); + } + exports.createFunctionModule = createFunctionModule; +diff --git a/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.d.ts b/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.d.ts +index 6be4113..ffc6c3f 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.d.ts +@@ -5,7 +5,7 @@ import { InsertObjectOrList, InsertObjectOrListFactory } from '../parser/insert- + import { InsertQueryNode } from '../operation-node/insert-query-node.js'; + import { QueryNode } from '../operation-node/query-node.js'; + import { NarrowPartial, SimplifyResult, SimplifySingleResult } from '../util/type-utils.js'; +-import { UpdateExpression } from '../parser/update-set-parser.js'; ++import { UpdateObjectExpression } from '../parser/update-set-parser.js'; + import { Compilable } from '../util/compilable.js'; + import { QueryExecutor } from '../query-executor/query-executor.js'; + import { QueryId } from '../util/query-id.js'; +@@ -60,13 +60,18 @@ export declare class InsertQueryBuilder implements R + * }) + * .executeTakeFirst() + * ++ * // `insertId` is only available on dialects that ++ * // automatically return the id of the inserted row ++ * // such as MySQL and SQLite. On PostgreSQL, for example, ++ * // you need to add a `returning` clause to the query to ++ * // get anything out. See the "returning data" example. + * console.log(result.insertId) + * ``` + * +- * The generated SQL (PostgreSQL): ++ * The generated SQL (MySQL): + * + * ```sql +- * insert into "person" ("first_name", "last_name", "age") values ($1, $2, $3) ++ * insert into `person` (`first_name`, `last_name`, `age`) values (?, ?, ?) + * ``` + * + * +@@ -131,11 +136,14 @@ export declare class InsertQueryBuilder implements R + * ```ts + * import { sql } from 'kysely' + * ++ * const ani = "Ani" ++ * const ston = "ston" ++ * + * const result = await db + * .insertInto('person') + * .values(({ ref, selectFrom, fn }) => ({ + * first_name: 'Jennifer', +- * last_name: sql`${'Ani'} || ${'ston'}`, ++ * last_name: sql`concat(${ani}, ${ston})`, + * middle_name: ref('first_name'), + * age: selectFrom('person') + * .select(fn.avg('age') +@@ -147,8 +155,18 @@ export declare class InsertQueryBuilder implements R + * The generated SQL (PostgreSQL): + * + * ```sql +- * insert into "person" ("first_name", "last_name", "age") +- * values ($1, $2 || $3, (select avg("age") as "avg_age" from "person")) ++ * insert into "person" ( ++ * "first_name", ++ * "last_name", ++ * "middle_name", ++ * "age" ++ * ) ++ * values ( ++ * $1, ++ * concat($2, $3), ++ * "first_name", ++ * (select avg("age") as "avg_age" from "person") ++ * ) + * ``` + * + * You can also use the callback version of subqueries or raw expressions: +@@ -208,7 +226,7 @@ export declare class InsertQueryBuilder implements R + * .select((eb) => [ + * 'pet.name', + * eb.val('Petson').as('last_name'), +- * eb.val(7).as('age'), ++ * eb.lit(7).as('age'), + * ]) + * ) + * .execute() +@@ -218,7 +236,7 @@ export declare class InsertQueryBuilder implements R + * + * ```sql + * insert into "person" ("first_name", "last_name", "age") +- * select "pet"."name", $1 as "first_name", $2 as "last_name" from "pet" ++ * select "pet"."name", $1 as "last_name", 7 as "age from "pet" + * ``` + */ + expression(expression: ExpressionOrFactory): InsertQueryBuilder; +@@ -414,7 +432,7 @@ export declare class InsertQueryBuilder implements R + * .onDuplicateKeyUpdate({ species: 'hamster' }) + * ``` + */ +- onDuplicateKeyUpdate(update: UpdateExpression): InsertQueryBuilder; ++ onDuplicateKeyUpdate(update: UpdateObjectExpression): InsertQueryBuilder; + /** + * Allows you to return data from modified rows. + * +diff --git a/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.js b/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.js +index ba57ff0..d89d1b8 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.js ++++ b/node_modules/kysely/dist/cjs/query-builder/insert-query-builder.js +@@ -77,7 +77,7 @@ class InsertQueryBuilder { + * .select((eb) => [ + * 'pet.name', + * eb.val('Petson').as('last_name'), +- * eb.val(7).as('age'), ++ * eb.lit(7).as('age'), + * ]) + * ) + * .execute() +@@ -87,7 +87,7 @@ class InsertQueryBuilder { + * + * ```sql + * insert into "person" ("first_name", "last_name", "age") +- * select "pet"."name", $1 as "first_name", $2 as "last_name" from "pet" ++ * select "pet"."name", $1 as "last_name", 7 as "age from "pet" + * ``` + */ + expression(expression) { +@@ -310,7 +310,7 @@ class InsertQueryBuilder { + return new InsertQueryBuilder({ + ...this.#props, + queryNode: insert_query_node_js_1.InsertQueryNode.cloneWith(this.#props.queryNode, { +- onDuplicateKey: on_duplicate_key_node_js_1.OnDuplicateKeyNode.create((0, update_set_parser_js_1.parseUpdateExpression)(update)), ++ onDuplicateKey: on_duplicate_key_node_js_1.OnDuplicateKeyNode.create((0, update_set_parser_js_1.parseUpdateObjectExpression)(update)), + }), + }); + } +diff --git a/node_modules/kysely/dist/cjs/query-builder/insert-result.d.ts b/node_modules/kysely/dist/cjs/query-builder/insert-result.d.ts +index c16fb08..d22a9e5 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/insert-result.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/insert-result.d.ts +@@ -23,7 +23,14 @@ + */ + export declare class InsertResult { + /** +- * The auto incrementing primary key ++ * The auto incrementing primary key of the inserted row. ++ * ++ * This property can be undefined when the query contains an `on conflict` ++ * clause that makes the query succeed even when nothing gets inserted. ++ * ++ * This property is always undefined on dialects like PostgreSQL that ++ * don't return the inserted id by default. On those dialects you need ++ * to use the {@link ReturningInterface.returning | returning} method. + */ + readonly insertId: bigint | undefined; + /** +diff --git a/node_modules/kysely/dist/cjs/query-builder/insert-result.js b/node_modules/kysely/dist/cjs/query-builder/insert-result.js +index 6a3246d..b564a4a 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/insert-result.js ++++ b/node_modules/kysely/dist/cjs/query-builder/insert-result.js +@@ -26,7 +26,14 @@ exports.InsertResult = void 0; + */ + class InsertResult { + /** +- * The auto incrementing primary key ++ * The auto incrementing primary key of the inserted row. ++ * ++ * This property can be undefined when the query contains an `on conflict` ++ * clause that makes the query succeed even when nothing gets inserted. ++ * ++ * This property is always undefined on dialects like PostgreSQL that ++ * don't return the inserted id by default. On those dialects you need ++ * to use the {@link ReturningInterface.returning | returning} method. + */ + insertId; + /** +diff --git a/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.d.ts b/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.d.ts +index 803563e..cfb9d96 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.d.ts +@@ -4,7 +4,7 @@ import { OperationNodeSource } from '../operation-node/operation-node-source.js' + import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js'; + import { ExpressionOrFactory } from '../parser/expression-parser.js'; + import { ReferenceExpression } from '../parser/reference-parser.js'; +-import { UpdateExpression } from '../parser/update-set-parser.js'; ++import { UpdateObjectExpression } from '../parser/update-set-parser.js'; + import { AnyColumn, SqlBool } from '../util/type-utils.js'; + import { WhereInterface } from './where-interface.js'; + export declare class OnConflictBuilder implements WhereInterface { +@@ -435,7 +435,7 @@ export declare class OnConflictBuilder implements Where + * ) + * ``` + */ +- doUpdateSet(update: UpdateExpression, OnConflictTables, OnConflictTables>): OnConflictUpdateBuilder, OnConflictTables>; ++ doUpdateSet(update: UpdateObjectExpression, OnConflictTables, OnConflictTables>): OnConflictUpdateBuilder, OnConflictTables>; + /** + * Simply calls the provided function passing `this` as the only argument. `$call` returns + * what the provided function returns. +diff --git a/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.js b/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.js +index cfb3a0b..b3b7e7e 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.js ++++ b/node_modules/kysely/dist/cjs/query-builder/on-conflict-builder.js +@@ -175,7 +175,7 @@ class OnConflictBuilder { + return new OnConflictUpdateBuilder({ + ...this.#props, + onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWith(this.#props.onConflictNode, { +- updates: (0, update_set_parser_js_1.parseUpdateExpression)(update), ++ updates: (0, update_set_parser_js_1.parseUpdateObjectExpression)(update), + }), + }); + } +diff --git a/node_modules/kysely/dist/cjs/query-builder/update-query-builder.d.ts b/node_modules/kysely/dist/cjs/query-builder/update-query-builder.d.ts +index 3d30eed..a71462a 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/update-query-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/query-builder/update-query-builder.d.ts +@@ -8,7 +8,7 @@ import { ReferenceExpression } from '../parser/reference-parser.js'; + import { QueryNode } from '../operation-node/query-node.js'; + import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js'; + import { UpdateQueryNode } from '../operation-node/update-query-node.js'; +-import { UpdateObject, UpdateObjectFactory } from '../parser/update-set-parser.js'; ++import { UpdateObject, UpdateObjectFactory, ExtractUpdateTypeFromReferenceExpression } from '../parser/update-set-parser.js'; + import { Compilable } from '../util/compilable.js'; + import { QueryExecutor } from '../query-executor/query-executor.js'; + import { QueryId } from '../util/query-id.js'; +@@ -24,6 +24,7 @@ import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../p + import { KyselyTypeError } from '../util/type-error.js'; + import { Streamable } from '../util/streamable.js'; + import { ExpressionOrFactory } from '../parser/expression-parser.js'; ++import { ValueExpression } from '../parser/value-parser.js'; + export declare class UpdateQueryBuilder implements WhereInterface, ReturningInterface, OperationNodeSource, Compilable, Explainable, Streamable { + #private; + constructor(props: UpdateQueryBuilderProps); +@@ -625,6 +626,20 @@ export declare class UpdateQueryBuilder eb.val('61710)) ++ * .where('id', '=', '1') ++ * .executeTakeFirst() ++ * ``` ++ * + * On PostgreSQL you can chain `returning` to the query to get + * the updated rows' columns (or any other expression) as the + * return value: +@@ -682,6 +697,7 @@ export declare class UpdateQueryBuilder): UpdateQueryBuilder; + set(update: UpdateObjectFactory): UpdateQueryBuilder; ++ set>(key: RE, value: ValueExpression>): UpdateQueryBuilder; + /** + * Allows you to return data from modified rows. + * +diff --git a/node_modules/kysely/dist/cjs/query-builder/update-query-builder.js b/node_modules/kysely/dist/cjs/query-builder/update-query-builder.js +index 1207bfd..6d24d8f 100644 +--- a/node_modules/kysely/dist/cjs/query-builder/update-query-builder.js ++++ b/node_modules/kysely/dist/cjs/query-builder/update-query-builder.js +@@ -65,10 +65,10 @@ class UpdateQueryBuilder { + queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)('FullJoin', args)), + }); + } +- set(update) { ++ set(...args) { + return new UpdateQueryBuilder({ + ...this.#props, +- queryNode: update_query_node_js_1.UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, (0, update_set_parser_js_1.parseUpdateExpression)(update)), ++ queryNode: update_query_node_js_1.UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, (0, update_set_parser_js_1.parseUpdate)(...args)), + }); + } + returning(selection) { +diff --git a/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.d.ts b/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.d.ts +index dbd954a..2f73125 100644 +--- a/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.d.ts ++++ b/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.d.ts +@@ -48,7 +48,7 @@ import { RootOperationNode, QueryCompiler } from './query-compiler.js'; + import { HavingNode } from '../operation-node/having-node.js'; + import { CreateSchemaNode } from '../operation-node/create-schema-node.js'; + import { DropSchemaNode } from '../operation-node/drop-schema-node.js'; +-import { AlterTableNode } from '../operation-node/alter-table-node.js'; ++import { AlterTableColumnAlterationNode, AlterTableNode } from '../operation-node/alter-table-node.js'; + import { DropColumnNode } from '../operation-node/drop-column-node.js'; + import { RenameColumnNode } from '../operation-node/rename-column-node.js'; + import { AlterColumnNode } from '../operation-node/alter-column-node.js'; +@@ -88,6 +88,11 @@ import { JSONPathNode } from '../operation-node/json-path-node.js'; + import { JSONPathLegNode } from '../operation-node/json-path-leg-node.js'; + import { JSONOperatorChainNode } from '../operation-node/json-operator-chain-node.js'; + import { TupleNode } from '../operation-node/tuple-node.js'; ++import { AddIndexNode } from '../operation-node/add-index-node.js'; ++import { CreateTriggerNode } from '../operation-node/create-trigger-node.js'; ++import { DropTriggerNode } from '../operation-node/drop-trigger-node.js'; ++import { TriggerEventNode } from '../operation-node/trigger-event-node.js'; ++import { TriggerOrderNode } from '../operation-node/trigger-order-node.js'; + export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler { + #private; + protected get numParameters(): number; +@@ -124,6 +129,10 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement + protected visitTable(node: TableNode): void; + protected visitSchemableIdentifier(node: SchemableIdentifierNode): void; + protected visitCreateTable(node: CreateTableNode): void; ++ protected visitCreateTrigger(node: CreateTriggerNode): void; ++ protected visitTriggerEvent(node: TriggerEventNode): void; ++ protected visitTriggerOrder(node: TriggerOrderNode): void; ++ protected visitDropTrigger(node: DropTriggerNode): void; + protected visitColumnDefinition(node: ColumnDefinitionNode): void; + protected getAutoIncrement(): string; + protected visitReferences(node: ReferencesNode): void; +@@ -184,6 +193,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement + protected visitJSONPath(node: JSONPathNode): void; + protected visitJSONPathLeg(node: JSONPathLegNode): void; + protected visitJSONOperatorChain(node: JSONOperatorChainNode): void; ++ protected visitAddIndex(node: AddIndexNode): void; + protected append(str: string): void; + protected appendValue(parameter: unknown): void; + protected getLeftIdentifierWrapper(): string; +@@ -197,4 +207,10 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement + protected addParameter(parameter: unknown): void; + protected appendImmediateValue(value: unknown): void; + protected sortSelectModifiers(arr: SelectModifierNode[]): ReadonlyArray; ++ protected compileColumnAlterations(columnAlterations: readonly AlterTableColumnAlterationNode[]): void; ++ /** ++ * controls whether the dialect adds a "type" keyword before a column's new data ++ * type in an ALTER TABLE statement. ++ */ ++ protected announcesNewColumnDataType(): boolean; + } +diff --git a/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.js b/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.js +index faf80c6..e1c4561 100644 +--- a/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.js ++++ b/node_modules/kysely/dist/cjs/query-compiler/default-query-compiler.js +@@ -1,6 +1,7 @@ + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.DefaultQueryCompiler = void 0; ++const create_table_node_js_1 = require("../operation-node/create-table-node.js"); + const insert_query_node_js_1 = require("../operation-node/insert-query-node.js"); + const operation_node_visitor_js_1 = require("../operation-node/operation-node-visitor.js"); + const operator_node_js_1 = require("../operation-node/operator-node.js"); +@@ -32,6 +33,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + const wrapInParens = this.parentNode !== undefined && + !parens_node_js_1.ParensNode.is(this.parentNode) && + !insert_query_node_js_1.InsertQueryNode.is(this.parentNode) && ++ !create_table_node_js_1.CreateTableNode.is(this.parentNode) && + !create_view_node_js_1.CreateViewNode.is(this.parentNode) && + !set_operation_node_js_1.SetOperationNode.is(this.parentNode); + if (this.parentNode === undefined && node.explain) { +@@ -348,17 +350,83 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + this.append('if not exists '); + } + this.visitNode(node.table); +- this.append(' ('); +- this.compileList([...node.columns, ...(node.constraints ?? [])]); +- this.append(')'); +- if (node.onCommit) { +- this.append(' on commit '); +- this.append(node.onCommit); ++ if (node.selectQuery) { ++ this.append(' as '); ++ this.visitNode(node.selectQuery); + } +- if (node.endModifiers && node.endModifiers.length > 0) { +- this.append(' '); +- this.compileList(node.endModifiers, ' '); ++ else { ++ this.append(' ('); ++ this.compileList([...node.columns, ...(node.constraints ?? [])]); ++ this.append(')'); ++ if (node.onCommit) { ++ this.append(' on commit '); ++ this.append(node.onCommit); ++ } ++ if (node.endModifiers && node.endModifiers.length > 0) { ++ this.append(' '); ++ this.compileList(node.endModifiers, ' '); ++ } ++ } ++ } ++ visitCreateTrigger(node) { ++ if (!node.time) ++ throw new Error('Trigger time is required.'); ++ if (!node.events) ++ throw new Error('Trigger event is required.'); ++ if (!node.table) ++ throw new Error('Trigger table is required.'); ++ this.append('create '); ++ if (node.temporary) { ++ this.append('temporary '); + } ++ if (node.orReplace) { ++ this.append('or replace '); ++ } ++ this.append('trigger '); ++ if (node.ifNotExists) { ++ this.append('if not exists '); ++ } ++ this.visitNode(node.name); ++ this.append(` ${node.time} `); ++ this.compileList(node.events, ' or '); ++ this.append(' on '); ++ this.visitNode(node.table); ++ if (node.forEach) ++ this.append(` for each ${node.forEach} `); ++ if (node.when) { ++ this.append(' when '); ++ this.visitNode(node.when); ++ } ++ if (node.order) ++ this.visitNode(node.order); ++ if (node.queries) { ++ this.append(' begin '); ++ this.compileList(node.queries, '; '); ++ this.append('; '); ++ this.append('end'); ++ } ++ else if (node.function) { ++ this.append(' execute function '); ++ this.visitNode(node.function); ++ } ++ } ++ visitTriggerEvent(node) { ++ this.append(`${node.event} `); ++ if (node.event === 'update' && node.columns) { ++ this.append('of '); ++ this.compileList(node.columns, ', '); ++ } ++ } ++ visitTriggerOrder(node) { ++ this.append(`${node.order} `); ++ this.visitNode(node.otherTriggerName); ++ } ++ visitDropTrigger(node) { ++ this.append('drop trigger '); ++ if (node.ifExists) { ++ this.append('if exists '); ++ } ++ this.visitNode(node.name); + } + visitColumnDefinition(node) { + this.visitNode(node.column); +@@ -385,6 +453,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + if (node.unique) { + this.append(' unique'); + } ++ if (node.nullsNotDistinct) { ++ this.append(' nulls not distinct'); ++ } + if (node.primaryKey) { + this.append(' primary key'); + } +@@ -565,6 +636,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + this.compileList(node.columns); + this.append(')'); + } ++ if (node.nullsNotDistinct) { ++ this.append(' nulls not distinct'); ++ } + if (node.where) { + this.append(' '); + this.visitNode(node.where); +@@ -617,7 +691,11 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + this.visitNode(node.name); + this.append(' '); + } +- this.append('unique ('); ++ this.append('unique'); ++ if (node.nullsNotDistinct) { ++ this.append(' nulls not distinct'); ++ } ++ this.append(' ('); + this.compileList(node.columns); + this.append(')'); + } +@@ -698,7 +776,13 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + this.visitNode(node.dropConstraint); + } + if (node.columnAlterations) { +- this.compileList(node.columnAlterations); ++ this.compileColumnAlterations(node.columnAlterations); ++ } ++ if (node.addIndex) { ++ this.visitNode(node.addIndex); ++ } ++ if (node.dropIndex) { ++ this.visitNode(node.dropIndex); + } + } + visitAddColumn(node) { +@@ -720,7 +804,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + this.visitNode(node.column); + this.append(' '); + if (node.dataType) { +- this.append('type '); ++ if (this.announcesNewColumnDataType()) { ++ this.append('type '); ++ } + this.visitNode(node.dataType); + if (node.dataTypeExpression) { + this.append('using '); +@@ -1006,6 +1092,23 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + this.visitNode(node.values[i]); + } + } ++ visitAddIndex(node) { ++ this.append('add '); ++ if (node.unique) { ++ this.append('unique '); ++ } ++ this.append('index '); ++ this.visitNode(node.name); ++ if (node.columns) { ++ this.append(' ('); ++ this.compileList(node.columns); ++ this.append(')'); ++ } ++ if (node.using) { ++ this.append(' using '); ++ this.visitNode(node.using); ++ } ++ } + append(str) { + this.#sql += str; + } +@@ -1079,6 +1182,16 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi + : 1); + return (0, object_utils_js_1.freeze)(arr); + } ++ compileColumnAlterations(columnAlterations) { ++ this.compileList(columnAlterations); ++ } ++ /** ++ * controls whether the dialect adds a "type" keyword before a column's new data ++ * type in an ALTER TABLE statement. ++ */ ++ announcesNewColumnDataType() { ++ return true; ++ } + } + exports.DefaultQueryCompiler = DefaultQueryCompiler; + const SELECT_MODIFIER_SQL = (0, object_utils_js_1.freeze)({ +diff --git a/node_modules/kysely/dist/cjs/query-compiler/query-compiler.d.ts b/node_modules/kysely/dist/cjs/query-compiler/query-compiler.d.ts +index e3a8555..e96bd90 100644 +--- a/node_modules/kysely/dist/cjs/query-compiler/query-compiler.d.ts ++++ b/node_modules/kysely/dist/cjs/query-compiler/query-compiler.d.ts +@@ -2,17 +2,19 @@ import { AlterTableNode } from '../operation-node/alter-table-node.js'; + import { CreateIndexNode } from '../operation-node/create-index-node.js'; + import { CreateSchemaNode } from '../operation-node/create-schema-node.js'; + import { CreateTableNode } from '../operation-node/create-table-node.js'; ++import { CreateTriggerNode } from '../operation-node/create-trigger-node.js'; + import { CreateTypeNode } from '../operation-node/create-type-node.js'; + import { CreateViewNode } from '../operation-node/create-view-node.js'; + import { DropIndexNode } from '../operation-node/drop-index-node.js'; + import { DropSchemaNode } from '../operation-node/drop-schema-node.js'; + import { DropTableNode } from '../operation-node/drop-table-node.js'; ++import { DropTriggerNode } from '../operation-node/drop-trigger-node.js'; + import { DropTypeNode } from '../operation-node/drop-type-node.js'; + import { DropViewNode } from '../operation-node/drop-view-node.js'; + import { QueryNode } from '../operation-node/query-node.js'; + import { RawNode } from '../operation-node/raw-node.js'; + import { CompiledQuery } from './compiled-query.js'; +-export type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode | CreateTypeNode | DropTypeNode; ++export type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode | CreateTypeNode | DropTypeNode | CreateTriggerNode | DropTriggerNode; + /** + * a `QueryCompiler` compiles a query expressed as a tree of `OperationNodes` into SQL. + */ +diff --git a/node_modules/kysely/dist/cjs/schema/alter-table-add-index-builder.d.ts b/node_modules/kysely/dist/cjs/schema/alter-table-add-index-builder.d.ts +new file mode 100644 +index 0000000..b297698 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/schema/alter-table-add-index-builder.d.ts +@@ -0,0 +1,104 @@ ++import { Expression } from '../expression/expression.js'; ++import { AlterTableNode } from '../operation-node/alter-table-node.js'; ++import { IndexType } from '../operation-node/create-index-node.js'; ++import { OperationNodeSource } from '../operation-node/operation-node-source.js'; ++import { OrderedColumnName } from '../parser/reference-parser.js'; ++import { CompiledQuery } from '../query-compiler/compiled-query.js'; ++import { QueryExecutor } from '../query-executor/query-executor.js'; ++import { Compilable } from '../util/compilable.js'; ++import { QueryId } from '../util/query-id.js'; ++export declare class AlterTableAddIndexBuilder implements OperationNodeSource, Compilable { ++ #private; ++ constructor(props: AlterTableAddIndexBuilderProps); ++ /** ++ * Makes the index unique. ++ */ ++ unique(): AlterTableAddIndexBuilder; ++ /** ++ * Adds a column to the index. ++ * ++ * Also see {@link columns} for adding multiple columns at once or {@link expression} ++ * for specifying an arbitrary expression. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * await db.schema ++ * .alterTable('person') ++ * .createIndex('person_first_name_and_age_index') ++ * .column('first_name') ++ * .column('age desc') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc) ++ * ``` ++ */ ++ column(column: OrderedColumnName): AlterTableAddIndexBuilder; ++ /** ++ * Specifies a list of columns for the index. ++ * ++ * Also see {@link column} for adding a single column or {@link expression} for ++ * specifying an arbitrary expression. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * await db.schema ++ * .alterTable('person') ++ * .addIndex('person_first_name_and_age_index') ++ * .columns(['first_name', 'age desc']) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc) ++ * ``` ++ */ ++ columns(columns: OrderedColumnName[]): AlterTableAddIndexBuilder; ++ /** ++ * Specifies an arbitrary expression for the index. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * import { sql } from 'kysely' ++ * ++ * await db.schema ++ * .alterTable('person') ++ * .addIndex('person_first_name_index') ++ * .expression(sql`(first_name < 'Sami')`) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_index` ((first_name < 'Sami')) ++ * ``` ++ */ ++ expression(expression: Expression): AlterTableAddIndexBuilder; ++ /** ++ * Specifies the index type. ++ */ ++ using(indexType: IndexType): AlterTableAddIndexBuilder; ++ using(indexType: string): AlterTableAddIndexBuilder; ++ /** ++ * Simply calls the provided function passing `this` as the only argument. `$call` returns ++ * what the provided function returns. ++ */ ++ $call(func: (qb: this) => T): T; ++ toOperationNode(): AlterTableNode; ++ compile(): CompiledQuery; ++ execute(): Promise; ++} ++export interface AlterTableAddIndexBuilderProps { ++ readonly queryId: QueryId; ++ readonly executor: QueryExecutor; ++ readonly node: AlterTableNode; ++} +diff --git a/node_modules/kysely/dist/cjs/schema/alter-table-add-index-builder.js b/node_modules/kysely/dist/cjs/schema/alter-table-add-index-builder.js +new file mode 100644 +index 0000000..005284b +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/schema/alter-table-add-index-builder.js +@@ -0,0 +1,146 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.AlterTableAddIndexBuilder = void 0; ++const add_index_node_js_1 = require("../operation-node/add-index-node.js"); ++const alter_table_node_js_1 = require("../operation-node/alter-table-node.js"); ++const raw_node_js_1 = require("../operation-node/raw-node.js"); ++const reference_parser_js_1 = require("../parser/reference-parser.js"); ++const object_utils_js_1 = require("../util/object-utils.js"); ++const prevent_await_js_1 = require("../util/prevent-await.js"); ++class AlterTableAddIndexBuilder { ++ #props; ++ constructor(props) { ++ this.#props = (0, object_utils_js_1.freeze)(props); ++ } ++ /** ++ * Makes the index unique. ++ */ ++ unique() { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: add_index_node_js_1.AddIndexNode.cloneWith(this.#props.node.addIndex, { ++ unique: true, ++ }), ++ }), ++ }); ++ } ++ /** ++ * Adds a column to the index. ++ * ++ * Also see {@link columns} for adding multiple columns at once or {@link expression} ++ * for specifying an arbitrary expression. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * await db.schema ++ * .alterTable('person') ++ * .createIndex('person_first_name_and_age_index') ++ * .column('first_name') ++ * .column('age desc') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc) ++ * ``` ++ */ ++ column(column) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: add_index_node_js_1.AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [(0, reference_parser_js_1.parseOrderedColumnName)(column)]), ++ }), ++ }); ++ } ++ /** ++ * Specifies a list of columns for the index. ++ * ++ * Also see {@link column} for adding a single column or {@link expression} for ++ * specifying an arbitrary expression. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * await db.schema ++ * .alterTable('person') ++ * .addIndex('person_first_name_and_age_index') ++ * .columns(['first_name', 'age desc']) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc) ++ * ``` ++ */ ++ columns(columns) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: add_index_node_js_1.AddIndexNode.cloneWithColumns(this.#props.node.addIndex, columns.map(reference_parser_js_1.parseOrderedColumnName)), ++ }), ++ }); ++ } ++ /** ++ * Specifies an arbitrary expression for the index. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * import { sql } from 'kysely' ++ * ++ * await db.schema ++ * .alterTable('person') ++ * .addIndex('person_first_name_index') ++ * .expression(sql`(first_name < 'Sami')`) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_index` ((first_name < 'Sami')) ++ * ``` ++ */ ++ expression(expression) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: add_index_node_js_1.AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [expression.toOperationNode()]), ++ }), ++ }); ++ } ++ using(indexType) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: add_index_node_js_1.AddIndexNode.cloneWith(this.#props.node.addIndex, { ++ using: raw_node_js_1.RawNode.createWithSql(indexType), ++ }), ++ }), ++ }); ++ } ++ /** ++ * Simply calls the provided function passing `this` as the only argument. `$call` returns ++ * what the provided function returns. ++ */ ++ $call(func) { ++ return func(this); ++ } ++ toOperationNode() { ++ return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId); ++ } ++ compile() { ++ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId); ++ } ++ async execute() { ++ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId); ++ } ++} ++exports.AlterTableAddIndexBuilder = AlterTableAddIndexBuilder; ++(0, prevent_await_js_1.preventAwait)(AlterTableAddIndexBuilder, "don't await AlterTableAddIndexBuilder instances directly. To execute the query you need to call `execute`"); +diff --git a/node_modules/kysely/dist/cjs/schema/alter-table-builder.d.ts b/node_modules/kysely/dist/cjs/schema/alter-table-builder.d.ts +index b0726ca..4453c5b 100644 +--- a/node_modules/kysely/dist/cjs/schema/alter-table-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/alter-table-builder.d.ts +@@ -11,6 +11,8 @@ import { AlterColumnBuilderCallback } from './alter-column-builder.js'; + import { AlterTableExecutor } from './alter-table-executor.js'; + import { AlterTableAddForeignKeyConstraintBuilder } from './alter-table-add-foreign-key-constraint-builder.js'; + import { AlterTableDropConstraintBuilder } from './alter-table-drop-constraint-builder.js'; ++import { AlterTableAddIndexBuilder } from './alter-table-add-index-builder.js'; ++import { UniqueConstraintNodeBuilderCallback } from './unique-constraint-builder.js'; + /** + * This builder can be used to create a `alter table` query. + */ +@@ -35,7 +37,7 @@ export declare class AlterTableBuilder implements ColumnAlteringInterface { + /** + * See {@link CreateTableBuilder.addUniqueConstraint} + */ +- addUniqueConstraint(constraintName: string, columns: string[]): AlterTableExecutor; ++ addUniqueConstraint(constraintName: string, columns: string[], build?: UniqueConstraintNodeBuilderCallback): AlterTableExecutor; + /** + * See {@link CreateTableBuilder.addCheckConstraint} + */ +@@ -53,6 +55,44 @@ export declare class AlterTableBuilder implements ColumnAlteringInterface { + */ + addPrimaryKeyConstraint(constraintName: string, columns: string[]): AlterTableExecutor; + dropConstraint(constraintName: string): AlterTableDropConstraintBuilder; ++ /** ++ * This can be used to add index to table. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.alterTable('person') ++ * .addIndex('person_email_index') ++ * .column('email') ++ * .unique() ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add unique index `person_email_index` (`email`) ++ * ``` ++ */ ++ addIndex(indexName: string): AlterTableAddIndexBuilder; ++ /** ++ * This can be used to drop index from table. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.alterTable('person') ++ * .dropIndex('person_email_index') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` drop index `test_first_name_index` ++ * ``` ++ */ ++ dropIndex(indexName: string): AlterTableExecutor; + /** + * Calls the given function passing `this` as the only argument. + * +diff --git a/node_modules/kysely/dist/cjs/schema/alter-table-builder.js b/node_modules/kysely/dist/cjs/schema/alter-table-builder.js +index a3fb975..0c586d8 100644 +--- a/node_modules/kysely/dist/cjs/schema/alter-table-builder.js ++++ b/node_modules/kysely/dist/cjs/schema/alter-table-builder.js +@@ -25,6 +25,10 @@ const alter_table_executor_js_1 = require("./alter-table-executor.js"); + const alter_table_add_foreign_key_constraint_builder_js_1 = require("./alter-table-add-foreign-key-constraint-builder.js"); + const alter_table_drop_constraint_builder_js_1 = require("./alter-table-drop-constraint-builder.js"); + const primary_constraint_node_js_1 = require("../operation-node/primary-constraint-node.js"); ++const drop_index_node_js_1 = require("../operation-node/drop-index-node.js"); ++const add_index_node_js_1 = require("../operation-node/add-index-node.js"); ++const alter_table_add_index_builder_js_1 = require("./alter-table-add-index-builder.js"); ++const unique_constraint_builder_js_1 = require("./unique-constraint-builder.js"); + /** + * This builder can be used to create a `alter table` query. + */ +@@ -85,11 +89,12 @@ class AlterTableBuilder { + /** + * See {@link CreateTableBuilder.addUniqueConstraint} + */ +- addUniqueConstraint(constraintName, columns) { ++ addUniqueConstraint(constraintName, columns, build = object_utils_js_1.noop) { ++ const uniqueConstraintBuilder = build(new unique_constraint_builder_js_1.UniqueConstraintNodeBuilder(unique_constraint_node_js_1.UniqueConstraintNode.create(columns, constraintName))); + return new alter_table_executor_js_1.AlterTableExecutor({ + ...this.#props, + node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, { +- addConstraint: add_constraint_node_js_1.AddConstraintNode.create(unique_constraint_node_js_1.UniqueConstraintNode.create(columns, constraintName)), ++ addConstraint: add_constraint_node_js_1.AddConstraintNode.create(uniqueConstraintBuilder.toOperationNode()), + }), + }); + } +@@ -136,6 +141,58 @@ class AlterTableBuilder { + }), + }); + } ++ /** ++ * This can be used to add index to table. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.alterTable('person') ++ * .addIndex('person_email_index') ++ * .column('email') ++ * .unique() ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add unique index `person_email_index` (`email`) ++ * ``` ++ */ ++ addIndex(indexName) { ++ return new alter_table_add_index_builder_js_1.AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: add_index_node_js_1.AddIndexNode.create(indexName), ++ }), ++ }); ++ } ++ /** ++ * This can be used to drop index from table. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.alterTable('person') ++ * .dropIndex('person_email_index') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` drop index `test_first_name_index` ++ * ``` ++ */ ++ dropIndex(indexName) { ++ return new alter_table_executor_js_1.AlterTableExecutor({ ++ ...this.#props, ++ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, { ++ dropIndex: drop_index_node_js_1.DropIndexNode.create(indexName), ++ }), ++ }); ++ } + /** + * Calls the given function passing `this` as the only argument. + * +diff --git a/node_modules/kysely/dist/cjs/schema/column-definition-builder.d.ts b/node_modules/kysely/dist/cjs/schema/column-definition-builder.d.ts +index 2a99c4c..a76104c 100644 +--- a/node_modules/kysely/dist/cjs/schema/column-definition-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/column-definition-builder.d.ts +@@ -183,6 +183,31 @@ export declare class ColumnDefinitionBuilder implements OperationNodeSource { + * ``` + */ + modifyFront(modifier: Expression): ColumnDefinitionBuilder; ++ /** ++ * Adds `nulls not distinct` specifier. ++ * Should be used with `unique` constraint. ++ * ++ * This only works on some dialects like PostgreSQL. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createTable('person') ++ * .addColumn('id', 'integer', col => col.primaryKey()) ++ * .addColumn('first_name', 'varchar(30)', col => col.unique().nullsNotDistinct()) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create table "person" ( ++ * "id" integer primary key, ++ * "first_name" varchar(30) unique nulls not distinct ++ * ) ++ * ``` ++ */ ++ nullsNotDistinct(): ColumnDefinitionBuilder; + /** + * This can be used to add any additional SQL to the end of the column definition. + * +diff --git a/node_modules/kysely/dist/cjs/schema/column-definition-builder.js b/node_modules/kysely/dist/cjs/schema/column-definition-builder.js +index aebbf98..eef0fcc 100644 +--- a/node_modules/kysely/dist/cjs/schema/column-definition-builder.js ++++ b/node_modules/kysely/dist/cjs/schema/column-definition-builder.js +@@ -258,6 +258,33 @@ class ColumnDefinitionBuilder { + modifyFront(modifier) { + return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWithFrontModifier(this.#node, modifier.toOperationNode())); + } ++ /** ++ * Adds `nulls not distinct` specifier. ++ * Should be used with `unique` constraint. ++ * ++ * This only works on some dialects like PostgreSQL. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createTable('person') ++ * .addColumn('id', 'integer', col => col.primaryKey()) ++ * .addColumn('first_name', 'varchar(30)', col => col.unique().nullsNotDistinct()) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create table "person" ( ++ * "id" integer primary key, ++ * "first_name" varchar(30) unique nulls not distinct ++ * ) ++ * ``` ++ */ ++ nullsNotDistinct() { ++ return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, { nullsNotDistinct: true })); ++ } + /** + * This can be used to add any additional SQL to the end of the column definition. + * +diff --git a/node_modules/kysely/dist/cjs/schema/create-index-builder.d.ts b/node_modules/kysely/dist/cjs/schema/create-index-builder.d.ts +index 27502c4..b44e116 100644 +--- a/node_modules/kysely/dist/cjs/schema/create-index-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/create-index-builder.d.ts +@@ -22,6 +22,29 @@ export declare class CreateIndexBuilder implements OperationNodeSourc + * Makes the index unique. + */ + unique(): CreateIndexBuilder; ++ /** ++ * Adds `nulls not distinct` specifier to index. ++ * This only works on some dialects like PostgreSQL. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createIndex('person_first_name_index') ++ * .on('person') ++ * .column('first_name') ++ * .nullsNotDistinct() ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create index "person_first_name_index" ++ * on "test" ("first_name") ++ * nulls not distinct; ++ * ``` ++ */ ++ nullsNotDistinct(): CreateIndexBuilder; + /** + * Specifies the table for the index. + */ +diff --git a/node_modules/kysely/dist/cjs/schema/create-index-builder.js b/node_modules/kysely/dist/cjs/schema/create-index-builder.js +index 4de7de6..e0e00a0 100644 +--- a/node_modules/kysely/dist/cjs/schema/create-index-builder.js ++++ b/node_modules/kysely/dist/cjs/schema/create-index-builder.js +@@ -39,6 +39,36 @@ class CreateIndexBuilder { + }), + }); + } ++ /** ++ * Adds `nulls not distinct` specifier to index. ++ * This only works on some dialects like PostgreSQL. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createIndex('person_first_name_index') ++ * .on('person') ++ * .column('first_name') ++ * .nullsNotDistinct() ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create index "person_first_name_index" ++ * on "test" ("first_name") ++ * nulls not distinct; ++ * ``` ++ */ ++ nullsNotDistinct() { ++ return new CreateIndexBuilder({ ++ ...this.#props, ++ node: create_index_node_js_1.CreateIndexNode.cloneWith(this.#props.node, { ++ nullsNotDistinct: true, ++ }), ++ }); ++ } + /** + * Specifies the table for the index. + */ +diff --git a/node_modules/kysely/dist/cjs/schema/create-table-builder.d.ts b/node_modules/kysely/dist/cjs/schema/create-table-builder.d.ts +index e160575..3b7e7ce 100644 +--- a/node_modules/kysely/dist/cjs/schema/create-table-builder.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/create-table-builder.d.ts +@@ -8,6 +8,7 @@ import { QueryId } from '../util/query-id.js'; + import { ForeignKeyConstraintBuilder } from './foreign-key-constraint-builder.js'; + import { DataTypeExpression } from '../parser/data-type-parser.js'; + import { Expression } from '../expression/expression.js'; ++import { UniqueConstraintNodeBuilderCallback } from './unique-constraint-builder.js'; + /** + * This builder can be used to create a `create table` query. + */ +@@ -56,7 +57,7 @@ export declare class CreateTableBuilder builder.nullsNotDistinct()) ++ * ``` + */ +- addUniqueConstraint(constraintName: string, columns: C[]): CreateTableBuilder; ++ addUniqueConstraint(constraintName: string, columns: C[], build?: UniqueConstraintNodeBuilderCallback): CreateTableBuilder; + /** + * Adds a check constraint. + * +@@ -205,6 +211,26 @@ export declare class CreateTableBuilder): CreateTableBuilder; ++ /** ++ * Allows to create table from `select` query. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createTable('copy') ++ * .temporary() ++ * .as(db.selectFrom('person').select(['first_name', 'last_name'])) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create temporary table "copy" as ++ * select "first_name", "last_name" from "person" ++ * ``` ++ */ ++ as(expression: Expression): CreateTableBuilder; + /** + * Calls the given function passing `this` as the only argument. + * +diff --git a/node_modules/kysely/dist/cjs/schema/create-table-builder.js b/node_modules/kysely/dist/cjs/schema/create-table-builder.js +index 5053177..73590bf 100644 +--- a/node_modules/kysely/dist/cjs/schema/create-table-builder.js ++++ b/node_modules/kysely/dist/cjs/schema/create-table-builder.js +@@ -15,6 +15,8 @@ const unique_constraint_node_js_1 = require("../operation-node/unique-constraint + const check_constraint_node_js_1 = require("../operation-node/check-constraint-node.js"); + const table_parser_js_1 = require("../parser/table-parser.js"); + const on_commit_action_parse_js_1 = require("../parser/on-commit-action-parse.js"); ++const unique_constraint_builder_js_1 = require("./unique-constraint-builder.js"); ++const expression_parser_js_1 = require("../parser/expression-parser.js"); + /** + * This builder can be used to create a `create table` query. + */ +@@ -86,7 +88,7 @@ class CreateTableBuilder { + * ``` + * + * With this method, it's once again good to remember that Kysely just builds the +- * query and doesn't provide the same API for all databses. For example, some ++ * query and doesn't provide the same API for all databases. For example, some + * databases like older MySQL don't support the `references` statement in the + * column definition. Instead foreign key constraints need to be defined in the + * `create table` query. See the next example: +@@ -145,11 +147,17 @@ class CreateTableBuilder { + * ```ts + * addUniqueConstraint('first_name_last_name_unique', ['first_name', 'last_name']) + * ``` ++ * ++ * In dialects such as PostgreSQL you can specify `nulls not distinct` as follows: ++ * ```ts ++ * addUniqueConstraint('first_name_last_name_unique', ['first_name', 'last_name'], (builder) => builder.nullsNotDistinct()) ++ * ``` + */ +- addUniqueConstraint(constraintName, columns) { ++ addUniqueConstraint(constraintName, columns, build = object_utils_js_1.noop) { ++ const uniqueConstraintBuilder = build(new unique_constraint_builder_js_1.UniqueConstraintNodeBuilder(unique_constraint_node_js_1.UniqueConstraintNode.create(columns, constraintName))); + return new CreateTableBuilder({ + ...this.#props, +- node: create_table_node_js_1.CreateTableNode.cloneWithConstraint(this.#props.node, unique_constraint_node_js_1.UniqueConstraintNode.create(columns, constraintName)), ++ node: create_table_node_js_1.CreateTableNode.cloneWithConstraint(this.#props.node, uniqueConstraintBuilder.toOperationNode()), + }); + } + /** +@@ -272,6 +280,33 @@ class CreateTableBuilder { + node: create_table_node_js_1.CreateTableNode.cloneWithEndModifier(this.#props.node, modifier.toOperationNode()), + }); + } ++ /** ++ * Allows to create table from `select` query. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createTable('copy') ++ * .temporary() ++ * .as(db.selectFrom('person').select(['first_name', 'last_name'])) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create temporary table "copy" as ++ * select "first_name", "last_name" from "person" ++ * ``` ++ */ ++ as(expression) { ++ return new CreateTableBuilder({ ++ ...this.#props, ++ node: create_table_node_js_1.CreateTableNode.cloneWith(this.#props.node, { ++ selectQuery: (0, expression_parser_js_1.parseExpression)(expression), ++ }), ++ }); ++ } + /** + * Calls the given function passing `this` as the only argument. + * +diff --git a/node_modules/kysely/dist/cjs/schema/create-trigger-builder.d.ts b/node_modules/kysely/dist/cjs/schema/create-trigger-builder.d.ts +new file mode 100644 +index 0000000..c65746a +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/schema/create-trigger-builder.d.ts +@@ -0,0 +1,68 @@ ++import { CreateTriggerNode } from '../operation-node/create-trigger-node.js'; ++import { OperationNodeSource } from '../operation-node/operation-node-source.js'; ++import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js'; ++import { ReferenceExpression } from '../parser/reference-parser.js'; ++import { CompiledQuery } from '../query-compiler/compiled-query.js'; ++import { QueryExecutor } from '../query-executor/query-executor.js'; ++import { Compilable } from '../util/compilable.js'; ++import { QueryId } from '../util/query-id.js'; ++import { AnyColumn, AnyColumnWithTable, SqlBool } from '../util/type-utils.js'; ++import { TriggerEvent } from '../operation-node/trigger-event-node.js'; ++import { ExpressionOrFactory } from '../parser/expression-parser.js'; ++import { TriggerQueryCreator } from '../trigger-query-creator.js'; ++export type DatabaseWithOldNewTables = DB & { ++ old: DB[TB]; ++ new: DB[TB]; ++}; ++/** ++ * This builder can be used to create a `create table` query. ++ */ ++export declare class CreateTriggerBuilder implements OperationNodeSource, Compilable { ++ #private; ++ constructor(props: CreateTriggerBuilderProps); ++ before(): CreateTriggerBuilder; ++ after(): CreateTriggerBuilder; ++ insteadOf(): CreateTriggerBuilder; ++ addEvent(event: E, columns?: E extends 'update' ? AnyColumn[] : never[]): CreateTriggerBuilder; ++ forEachRow(): CreateTriggerBuilder; ++ forEachStatement(): CreateTriggerBuilder; ++ follows(otherTriggerName: string): CreateTriggerBuilder; ++ precedes(otherTriggerName: string): CreateTriggerBuilder; ++ /** ++ * Specifies the table for the trigger. ++ */ ++ onTable(table: TE, schema?: string): CreateTriggerBuilder; ++ /** ++ * Adds the "temporary" modifier. ++ * ++ * Use this to create a temporary trigger. ++ */ ++ temporary(): CreateTriggerBuilder; ++ /** ++ * Adds the "if not exists" modifier. ++ * ++ * If the trigger already exists, no error is thrown if this method has been called. ++ */ ++ ifNotExists(): CreateTriggerBuilder; ++ /** ++ * Only supported on PostgreSQL ++ */ ++ orReplace(): CreateTriggerBuilder; ++ /** ++ * Adds a query to the trigger. ++ */ ++ addQuery(build: QueryCreatorCallback): CreateTriggerBuilder; ++ function(name: string, args: ReadonlyArray>): CreateTriggerBuilder; ++ when, 'old' | 'new'>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList): CreateTriggerBuilder; ++ when(factory: ExpressionOrFactory, 'old' | 'new', SqlBool>): CreateTriggerBuilder; ++ $call(func: (qb: this) => T): T; ++ toOperationNode(): CreateTriggerNode; ++ compile(): CompiledQuery; ++ execute(): Promise; ++} ++export interface CreateTriggerBuilderProps { ++ readonly queryId: QueryId; ++ readonly executor: QueryExecutor; ++ readonly node: CreateTriggerNode; ++} ++export type QueryCreatorCallback = (creator: TriggerQueryCreator) => OperationNodeSource; +diff --git a/node_modules/kysely/dist/cjs/schema/create-trigger-builder.js b/node_modules/kysely/dist/cjs/schema/create-trigger-builder.js +new file mode 100644 +index 0000000..ebc814c +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/schema/create-trigger-builder.js +@@ -0,0 +1,180 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.CreateTriggerBuilder = void 0; ++const create_trigger_node_js_1 = require("../operation-node/create-trigger-node.js"); ++const query_node_js_1 = require("../operation-node/query-node.js"); ++const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js"); ++const reference_parser_js_1 = require("../parser/reference-parser.js"); ++const immediate_value_transformer_js_1 = require("../plugin/immediate-value/immediate-value-transformer.js"); ++const object_utils_js_1 = require("../util/object-utils.js"); ++const prevent_await_js_1 = require("../util/prevent-await.js"); ++const identifier_node_js_1 = require("../operation-node/identifier-node.js"); ++const trigger_order_node_js_1 = require("../operation-node/trigger-order-node.js"); ++const trigger_event_node_js_1 = require("../operation-node/trigger-event-node.js"); ++const function_node_js_1 = require("../operation-node/function-node.js"); ++const trigger_query_creator_js_1 = require("../trigger-query-creator.js"); ++const table_node_js_1 = require("../operation-node/table-node.js"); ++/** ++ * This builder can be used to create a `create table` query. ++ */ ++class CreateTriggerBuilder { ++ #props; ++ constructor(props) { ++ this.#props = (0, object_utils_js_1.freeze)(props); ++ } ++ before() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ time: 'before', ++ }), ++ }); ++ } ++ after() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ time: 'after', ++ }), ++ }); ++ } ++ insteadOf() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ time: 'instead of', ++ }), ++ }); ++ } ++ addEvent(event, columns) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWithEvent(this.#props.node, trigger_event_node_js_1.TriggerEventNode.create(event, columns?.map(reference_parser_js_1.parseOrderedColumnName))), ++ }); ++ } ++ forEachRow() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ forEach: `row`, ++ }), ++ }); ++ } ++ forEachStatement() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ forEach: `statement`, ++ }), ++ }); ++ } ++ follows(otherTriggerName) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ order: trigger_order_node_js_1.TriggerOrderNode.create('follows', identifier_node_js_1.IdentifierNode.create(otherTriggerName)), ++ }), ++ }); ++ } ++ precedes(otherTriggerName) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ order: trigger_order_node_js_1.TriggerOrderNode.create('precedes', identifier_node_js_1.IdentifierNode.create(otherTriggerName)), ++ }), ++ }); ++ } ++ /** ++ * Specifies the table for the trigger. ++ */ ++ onTable(table, schema) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ table: schema ++ ? table_node_js_1.TableNode.createWithSchema(schema, table) ++ : table_node_js_1.TableNode.create(table), ++ }), ++ }); ++ } ++ /** ++ * Adds the "temporary" modifier. ++ * ++ * Use this to create a temporary trigger. ++ */ ++ temporary() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ temporary: true, ++ }), ++ }); ++ } ++ /** ++ * Adds the "if not exists" modifier. ++ * ++ * If the trigger already exists, no error is thrown if this method has been called. ++ */ ++ ifNotExists() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ ifNotExists: true, ++ }), ++ }); ++ } ++ /** ++ * Only supported on PostgreSQL ++ */ ++ orReplace() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ orReplace: true, ++ }), ++ }); ++ } ++ /** ++ * Adds a query to the trigger. ++ */ ++ addQuery(build) { ++ const node = build(new trigger_query_creator_js_1.TriggerQueryCreator({ executor: this.#props.executor })).toOperationNode(); ++ if (!query_node_js_1.QueryNode.is(node)) ++ throw new Error('Must be a query node.'); ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWithQuery(this.#props.node, node), ++ }); ++ } ++ function(name, args) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ function: function_node_js_1.FunctionNode.create(name, (0, reference_parser_js_1.parseReferenceExpressionOrList)(args)), ++ }), ++ }); ++ } ++ when(...args) { ++ const transformer = new immediate_value_transformer_js_1.ImmediateValueTransformer(); ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: create_trigger_node_js_1.CreateTriggerNode.cloneWith(this.#props.node, { ++ when: transformer.transformNode((0, binary_operation_parser_js_1.parseValueBinaryOperationOrExpression)(args)), ++ }), ++ }); ++ } ++ $call(func) { ++ return func(this); ++ } ++ toOperationNode() { ++ return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId); ++ } ++ compile() { ++ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId); ++ } ++ async execute() { ++ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId); ++ } ++} ++exports.CreateTriggerBuilder = CreateTriggerBuilder; ++(0, prevent_await_js_1.preventAwait)(CreateTriggerBuilder, "don't await CreateTriggerBuilder instances directly. To execute the query you need to call `execute`"); +diff --git a/node_modules/kysely/dist/cjs/schema/drop-trigger-builder.d.ts b/node_modules/kysely/dist/cjs/schema/drop-trigger-builder.d.ts +new file mode 100644 +index 0000000..b0e3fce +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/schema/drop-trigger-builder.d.ts +@@ -0,0 +1,25 @@ ++import { OperationNodeSource } from '../operation-node/operation-node-source.js'; ++import { CompiledQuery } from '../query-compiler/compiled-query.js'; ++import { Compilable } from '../util/compilable.js'; ++import { QueryExecutor } from '../query-executor/query-executor.js'; ++import { QueryId } from '../util/query-id.js'; ++import { DropTriggerNode } from '../operation-node/drop-trigger-node.js'; ++export declare class DropTriggerBuilder implements OperationNodeSource, Compilable { ++ #private; ++ constructor(props: DropTriggerBuilderProps); ++ ifExists(): DropTriggerBuilder; ++ cascade(): DropTriggerBuilder; ++ /** ++ * Simply calls the provided function passing `this` as the only argument. `$call` returns ++ * what the provided function returns. ++ */ ++ $call(func: (qb: this) => T): T; ++ toOperationNode(): DropTriggerNode; ++ compile(): CompiledQuery; ++ execute(): Promise; ++} ++export interface DropTriggerBuilderProps { ++ readonly queryId: QueryId; ++ readonly executor: QueryExecutor; ++ readonly node: DropTriggerNode; ++} +diff --git a/node_modules/kysely/dist/cjs/schema/drop-trigger-builder.js b/node_modules/kysely/dist/cjs/schema/drop-trigger-builder.js +new file mode 100644 +index 0000000..1c55383 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/schema/drop-trigger-builder.js +@@ -0,0 +1,46 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.DropTriggerBuilder = void 0; ++const prevent_await_js_1 = require("../util/prevent-await.js"); ++const object_utils_js_1 = require("../util/object-utils.js"); ++const drop_trigger_node_js_1 = require("../operation-node/drop-trigger-node.js"); ++class DropTriggerBuilder { ++ #props; ++ constructor(props) { ++ this.#props = (0, object_utils_js_1.freeze)(props); ++ } ++ ifExists() { ++ return new DropTriggerBuilder({ ++ ...this.#props, ++ node: drop_trigger_node_js_1.DropTriggerNode.cloneWith(this.#props.node, { ++ ifExists: true, ++ }), ++ }); ++ } ++ cascade() { ++ return new DropTriggerBuilder({ ++ ...this.#props, ++ node: drop_trigger_node_js_1.DropTriggerNode.cloneWith(this.#props.node, { ++ cascade: true, ++ }), ++ }); ++ } ++ /** ++ * Simply calls the provided function passing `this` as the only argument. `$call` returns ++ * what the provided function returns. ++ */ ++ $call(func) { ++ return func(this); ++ } ++ toOperationNode() { ++ return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId); ++ } ++ compile() { ++ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId); ++ } ++ async execute() { ++ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId); ++ } ++} ++exports.DropTriggerBuilder = DropTriggerBuilder; ++(0, prevent_await_js_1.preventAwait)(DropTriggerBuilder, "don't await DropTriggerBuilder instances directly. To execute the query you need to call `execute`"); +diff --git a/node_modules/kysely/dist/cjs/schema/schema.d.ts b/node_modules/kysely/dist/cjs/schema/schema.d.ts +index 8634b84..19cf68c 100644 +--- a/node_modules/kysely/dist/cjs/schema/schema.d.ts ++++ b/node_modules/kysely/dist/cjs/schema/schema.d.ts +@@ -11,10 +11,12 @@ import { DropViewBuilder } from './drop-view-builder.js'; + import { KyselyPlugin } from '../plugin/kysely-plugin.js'; + import { CreateTypeBuilder } from './create-type-builder.js'; + import { DropTypeBuilder } from './drop-type-builder.js'; ++import { CreateTriggerBuilder } from './create-trigger-builder.js'; ++import { DropTriggerBuilder } from './drop-trigger-builder.js'; + /** + * Provides methods for building database schema. + */ +-export declare class SchemaModule { ++export declare class SchemaModule { + #private; + constructor(executor: QueryExecutor); + /** +@@ -201,16 +203,18 @@ export declare class SchemaModule { + * ``` + */ + dropType(typeName: string): DropTypeBuilder; ++ createTrigger(name: string): CreateTriggerBuilder; ++ dropTrigger(triggerName: string): DropTriggerBuilder; + /** + * Returns a copy of this schema module with the given plugin installed. + */ +- withPlugin(plugin: KyselyPlugin): SchemaModule; ++ withPlugin(plugin: KyselyPlugin): SchemaModule; + /** + * Returns a copy of this schema module without any plugins. + */ +- withoutPlugins(): SchemaModule; ++ withoutPlugins(): SchemaModule; + /** + * See {@link QueryCreator.withSchema} + */ +- withSchema(schema: string): SchemaModule; ++ withSchema(schema: string): SchemaModule; + } +diff --git a/node_modules/kysely/dist/cjs/schema/schema.js b/node_modules/kysely/dist/cjs/schema/schema.js +index 052622f..7b979ab 100644 +--- a/node_modules/kysely/dist/cjs/schema/schema.js ++++ b/node_modules/kysely/dist/cjs/schema/schema.js +@@ -27,6 +27,11 @@ const drop_type_builder_js_1 = require("./drop-type-builder.js"); + const create_type_node_js_1 = require("../operation-node/create-type-node.js"); + const drop_type_node_js_1 = require("../operation-node/drop-type-node.js"); + const identifier_parser_js_1 = require("../parser/identifier-parser.js"); ++const create_trigger_builder_js_1 = require("./create-trigger-builder.js"); ++const create_trigger_node_js_1 = require("../operation-node/create-trigger-node.js"); ++const identifier_node_js_1 = require("../operation-node/identifier-node.js"); ++const drop_trigger_node_js_1 = require("../operation-node/drop-trigger-node.js"); ++const drop_trigger_builder_js_1 = require("./drop-trigger-builder.js"); + /** + * Provides methods for building database schema. + */ +@@ -285,6 +290,20 @@ class SchemaModule { + node: drop_type_node_js_1.DropTypeNode.create((0, identifier_parser_js_1.parseSchemableIdentifier)(typeName)), + }); + } ++ createTrigger(name) { ++ return new create_trigger_builder_js_1.CreateTriggerBuilder({ ++ queryId: (0, query_id_js_1.createQueryId)(), ++ executor: this.#executor, ++ node: create_trigger_node_js_1.CreateTriggerNode.create(identifier_node_js_1.IdentifierNode.create(name)), ++ }); ++ } ++ dropTrigger(triggerName) { ++ return new drop_trigger_builder_js_1.DropTriggerBuilder({ ++ queryId: (0, query_id_js_1.createQueryId)(), ++ executor: this.#executor, ++ node: drop_trigger_node_js_1.DropTriggerNode.create((0, identifier_parser_js_1.parseSchemableIdentifier)(triggerName)), ++ }); ++ } + /** + * Returns a copy of this schema module with the given plugin installed. + */ +diff --git a/node_modules/kysely/dist/cjs/schema/unique-constraint-builder.d.ts b/node_modules/kysely/dist/cjs/schema/unique-constraint-builder.d.ts +new file mode 100644 +index 0000000..4362213 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/schema/unique-constraint-builder.d.ts +@@ -0,0 +1,14 @@ ++import { OperationNodeSource } from '../operation-node/operation-node-source.js'; ++import { UniqueConstraintNode } from '../operation-node/unique-constraint-node.js'; ++export declare class UniqueConstraintNodeBuilder implements OperationNodeSource { ++ #private; ++ constructor(node: UniqueConstraintNode); ++ toOperationNode(): UniqueConstraintNode; ++ /** ++ * Adds `nulls not distinct` to the unique constraint definition ++ * ++ * Supported by PostgreSQL dialect only ++ */ ++ nullsNotDistinct(): UniqueConstraintNodeBuilder; ++} ++export type UniqueConstraintNodeBuilderCallback = (builder: UniqueConstraintNodeBuilder) => UniqueConstraintNodeBuilder; +diff --git a/node_modules/kysely/dist/cjs/schema/unique-constraint-builder.js b/node_modules/kysely/dist/cjs/schema/unique-constraint-builder.js +new file mode 100644 +index 0000000..9931354 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/schema/unique-constraint-builder.js +@@ -0,0 +1,24 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.UniqueConstraintNodeBuilder = void 0; ++const unique_constraint_node_js_1 = require("../operation-node/unique-constraint-node.js"); ++const prevent_await_js_1 = require("../util/prevent-await.js"); ++class UniqueConstraintNodeBuilder { ++ #node; ++ constructor(node) { ++ this.#node = node; ++ } ++ toOperationNode() { ++ return this.#node; ++ } ++ /** ++ * Adds `nulls not distinct` to the unique constraint definition ++ * ++ * Supported by PostgreSQL dialect only ++ */ ++ nullsNotDistinct() { ++ return new UniqueConstraintNodeBuilder(unique_constraint_node_js_1.UniqueConstraintNode.cloneWith(this.#node, { nullsNotDistinct: true })); ++ } ++} ++exports.UniqueConstraintNodeBuilder = UniqueConstraintNodeBuilder; ++(0, prevent_await_js_1.preventAwait)(UniqueConstraintNodeBuilder, "don't await UniqueConstraintNodeBuilder instances directly."); +diff --git a/node_modules/kysely/dist/cjs/trigger-query-creator.d.ts b/node_modules/kysely/dist/cjs/trigger-query-creator.d.ts +new file mode 100644 +index 0000000..51d0b2f +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/trigger-query-creator.d.ts +@@ -0,0 +1,35 @@ ++import { SelectQueryBuilder } from './query-builder/select-query-builder.js'; ++import { InsertQueryBuilder } from './query-builder/insert-query-builder.js'; ++import { DeleteQueryBuilder } from './query-builder/delete-query-builder.js'; ++import { UpdateQueryBuilder } from './query-builder/update-query-builder.js'; ++import { TableExpression, From, FromTables, TableReference, ExtractTableAlias, AnyAliasedTable, PickTableWithAlias } from './parser/table-parser.js'; ++import { InsertResult } from './query-builder/insert-result.js'; ++import { DeleteResult } from './query-builder/delete-result.js'; ++import { UpdateResult } from './query-builder/update-result.js'; ++import { KyselyPlugin } from './plugin/kysely-plugin.js'; ++import { CallbackSelection, SelectCallback, SelectExpression, Selection } from './parser/select-parser.js'; ++import { QueryCreatorProps } from './query-creator.js'; ++import { DatabaseWithOldNewTables } from './schema/create-trigger-builder.js'; ++export declare class TriggerQueryCreator { ++ #private; ++ constructor(props: QueryCreatorProps); ++ selectFrom(from: TE[]): SelectQueryBuilder, ExtractTableAlias | 'new' | 'old', {}>; ++ selectFrom>(from: TE[]): SelectQueryBuilder, TE>, FromTables | 'new' | 'old', {}>; ++ selectFrom(from: TE): SelectQueryBuilder, ExtractTableAlias | 'new' | 'old', {}>; ++ selectFrom>(from: TE): SelectQueryBuilder & PickTableWithAlias, TE>, ExtractTableAlias | 'new' | 'old', {}>; ++ selectFrom>(from: TE): SelectQueryBuilder, TE>, FromTables | 'new' | 'old', {}>; ++ selectNoFrom>(selections: ReadonlyArray): SelectQueryBuilder>; ++ selectNoFrom>(callback: CB): SelectQueryBuilder>; ++ selectNoFrom>(selection: SE): SelectQueryBuilder>; ++ insertInto(table: T): InsertQueryBuilder; ++ replaceInto(table: T): InsertQueryBuilder; ++ deleteFrom(from: TR[]): DeleteQueryBuilder, ExtractTableAlias | 'new' | 'old', DeleteResult>; ++ deleteFrom>(tables: TR[]): DeleteQueryBuilder, TR>, FromTables | 'new' | 'old', DeleteResult>; ++ deleteFrom(from: TR): DeleteQueryBuilder, ExtractTableAlias | 'new' | 'old', DeleteResult>; ++ deleteFrom>(table: TR): DeleteQueryBuilder, TR>, FromTables | 'new' | 'old', DeleteResult>; ++ updateTable(table: TR): UpdateQueryBuilder, ExtractTableAlias, UpdateResult>; ++ updateTable>(table: TR): UpdateQueryBuilder, ExtractTableAlias, ExtractTableAlias, UpdateResult>; ++ updateTable>(table: TR): UpdateQueryBuilder, FromTables, FromTables, UpdateResult>; ++ withPlugin(plugin: KyselyPlugin): TriggerQueryCreator; ++ withoutPlugins(): TriggerQueryCreator; ++} +diff --git a/node_modules/kysely/dist/cjs/trigger-query-creator.js b/node_modules/kysely/dist/cjs/trigger-query-creator.js +new file mode 100644 +index 0000000..5d4d073 +--- /dev/null ++++ b/node_modules/kysely/dist/cjs/trigger-query-creator.js +@@ -0,0 +1,76 @@ ++"use strict"; ++Object.defineProperty(exports, "__esModule", { value: true }); ++exports.TriggerQueryCreator = void 0; ++const select_query_builder_js_1 = require("./query-builder/select-query-builder.js"); ++const insert_query_builder_js_1 = require("./query-builder/insert-query-builder.js"); ++const delete_query_builder_js_1 = require("./query-builder/delete-query-builder.js"); ++const update_query_builder_js_1 = require("./query-builder/update-query-builder.js"); ++const delete_query_node_js_1 = require("./operation-node/delete-query-node.js"); ++const insert_query_node_js_1 = require("./operation-node/insert-query-node.js"); ++const select_query_node_js_1 = require("./operation-node/select-query-node.js"); ++const update_query_node_js_1 = require("./operation-node/update-query-node.js"); ++const table_parser_js_1 = require("./parser/table-parser.js"); ++const query_id_js_1 = require("./util/query-id.js"); ++const object_utils_js_1 = require("./util/object-utils.js"); ++const select_parser_js_1 = require("./parser/select-parser.js"); ++class TriggerQueryCreator { ++ #props; ++ constructor(props) { ++ this.#props = (0, object_utils_js_1.freeze)(props); ++ } ++ selectFrom(from) { ++ return (0, select_query_builder_js_1.createSelectQueryBuilder)({ ++ queryId: (0, query_id_js_1.createQueryId)(), ++ executor: this.#props.executor, ++ queryNode: select_query_node_js_1.SelectQueryNode.createFrom((0, table_parser_js_1.parseTableExpressionOrList)(from), this.#props.withNode), ++ }); ++ } ++ selectNoFrom(selection) { ++ return (0, select_query_builder_js_1.createSelectQueryBuilder)({ ++ queryId: (0, query_id_js_1.createQueryId)(), ++ executor: this.#props.executor, ++ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSelections(select_query_node_js_1.SelectQueryNode.create(this.#props.withNode), (0, select_parser_js_1.parseSelectArg)(selection)), ++ }); ++ } ++ insertInto(table) { ++ return new insert_query_builder_js_1.InsertQueryBuilder({ ++ queryId: (0, query_id_js_1.createQueryId)(), ++ executor: this.#props.executor, ++ queryNode: insert_query_node_js_1.InsertQueryNode.create((0, table_parser_js_1.parseTable)(table), this.#props.withNode), ++ }); ++ } ++ replaceInto(table) { ++ return new insert_query_builder_js_1.InsertQueryBuilder({ ++ queryId: (0, query_id_js_1.createQueryId)(), ++ executor: this.#props.executor, ++ queryNode: insert_query_node_js_1.InsertQueryNode.create((0, table_parser_js_1.parseTable)(table), this.#props.withNode, true), ++ }); ++ } ++ deleteFrom(tables) { ++ return new delete_query_builder_js_1.DeleteQueryBuilder({ ++ queryId: (0, query_id_js_1.createQueryId)(), ++ executor: this.#props.executor, ++ queryNode: delete_query_node_js_1.DeleteQueryNode.create((0, table_parser_js_1.parseTableExpressionOrList)(tables), this.#props.withNode), ++ }); ++ } ++ updateTable(table) { ++ return new update_query_builder_js_1.UpdateQueryBuilder({ ++ queryId: (0, query_id_js_1.createQueryId)(), ++ executor: this.#props.executor, ++ queryNode: update_query_node_js_1.UpdateQueryNode.create((0, table_parser_js_1.parseTableExpression)(table), this.#props.withNode), ++ }); ++ } ++ withPlugin(plugin) { ++ return new TriggerQueryCreator({ ++ ...this.#props, ++ executor: this.#props.executor.withPlugin(plugin), ++ }); ++ } ++ withoutPlugins() { ++ return new TriggerQueryCreator({ ++ ...this.#props, ++ executor: this.#props.executor.withoutPlugins(), ++ }); ++ } ++} ++exports.TriggerQueryCreator = TriggerQueryCreator; +diff --git a/node_modules/kysely/dist/cjs/util/object-utils.d.ts b/node_modules/kysely/dist/cjs/util/object-utils.d.ts +index 1b9f563..c9fa82b 100644 +--- a/node_modules/kysely/dist/cjs/util/object-utils.d.ts ++++ b/node_modules/kysely/dist/cjs/util/object-utils.d.ts +@@ -6,7 +6,7 @@ export declare function isNumber(obj: unknown): obj is number; + export declare function isBoolean(obj: unknown): obj is boolean; + export declare function isNull(obj: unknown): obj is null; + export declare function isDate(obj: unknown): obj is Date; +-export declare function isBigInt(obj: unknown): obj is BigInt; ++export declare function isBigInt(obj: unknown): obj is bigint; + export declare function isBuffer(obj: unknown): obj is { + length: number; + }; +diff --git a/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.d.ts b/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.d.ts +index dc87916..e3fb628 100644 +--- a/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.d.ts ++++ b/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.d.ts +@@ -7,6 +7,14 @@ import { DialectAdapter, MigrationLockOptions } from './dialect-adapter.js'; + * they are added and there will be less breaking changes. + */ + export declare abstract class DialectAdapterBase implements DialectAdapter { ++ /** ++ * Whether or not this dialect supports `if not exists` in creation of tables/schemas/views/etc. ++ * ++ * If this is false, Kysely's internal migrations tables and schemas are created ++ * without `if not exists` in migrations. This is not a problem if the dialect ++ * supports transactional DDL. ++ */ ++ get supportsCreateIfNotExists(): boolean; + /** + * Whether or not this dialect supports transactional DDL. + * +diff --git a/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.js b/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.js +index b5f7843..7065ce6 100644 +--- a/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.js ++++ b/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.js +@@ -6,6 +6,9 @@ + * they are added and there will be less breaking changes. + */ + export class DialectAdapterBase { ++ get supportsCreateIfNotExists() { ++ return true; ++ } + get supportsTransactionalDdl() { + return false; + } +diff --git a/node_modules/kysely/dist/esm/dialect/dialect-adapter.d.ts b/node_modules/kysely/dist/esm/dialect/dialect-adapter.d.ts +index 73a925a..fe7f1b3 100644 +--- a/node_modules/kysely/dist/esm/dialect/dialect-adapter.d.ts ++++ b/node_modules/kysely/dist/esm/dialect/dialect-adapter.d.ts +@@ -8,6 +8,14 @@ import { Kysely } from '../kysely.js'; + * it. For that there's a `supportsTransactionalDdl` boolean in this interface. + */ + export interface DialectAdapter { ++ /** ++ * Whether or not this dialect supports `if not exists` in creation of tables/schemas/views/etc. ++ * ++ * If this is false, Kysely's internal migrations tables and schemas are created ++ * without `if not exists` in migrations. This is not a problem if the dialect ++ * supports transactional DDL. ++ */ ++ readonly supportsCreateIfNotExists: boolean; + /** + * Whether or not this dialect supports transactional DDL. + * +diff --git a/node_modules/kysely/dist/esm/dialect/postgres/postgres-driver.js b/node_modules/kysely/dist/esm/dialect/postgres/postgres-driver.js +index c83b381..3bcddb6 100644 +--- a/node_modules/kysely/dist/esm/dialect/postgres/postgres-driver.js ++++ b/node_modules/kysely/dist/esm/dialect/postgres/postgres-driver.js +@@ -26,7 +26,7 @@ export class PostgresDriver { + // The driver must take care of calling `onCreateConnection` when a new + // connection is created. The `pg` module doesn't provide an async hook + // for the connection creation. We need to call the method explicitly. +- if (this.#config?.onCreateConnection) { ++ if (this.#config.onCreateConnection) { + await this.#config.onCreateConnection(connection); + } + } +diff --git a/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.d.ts b/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +index 69a0a7d..550df53 100644 +--- a/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.d.ts ++++ b/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +@@ -1,7 +1,7 @@ + import { Kysely } from '../../kysely.js'; + import { DialectAdapterBase } from '../dialect-adapter-base.js'; + import { MigrationLockOptions } from '../dialect-adapter.js'; +-export declare class SqliteAdapter implements DialectAdapterBase { ++export declare class SqliteAdapter extends DialectAdapterBase { + /** + * Whether or not this dialect supports transactional DDL. + * +diff --git a/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.js b/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.js +index f095ebb..4f1b71f 100644 +--- a/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.js ++++ b/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.js +@@ -1,5 +1,6 @@ + /// +-export class SqliteAdapter { ++import { DialectAdapterBase } from '../dialect-adapter-base.js'; ++export class SqliteAdapter extends DialectAdapterBase { + get supportsTransactionalDdl() { + return false; + } +diff --git a/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts b/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +index 810af98..a873682 100644 +--- a/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts ++++ b/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +@@ -37,4 +37,5 @@ export interface SqliteStatement { + changes: number | bigint; + lastInsertRowid: number | bigint; + }; ++ iterate(parameters: ReadonlyArray): IterableIterator; + } +diff --git a/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-driver.js b/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-driver.js +index 23f21e3..d20935f 100644 +--- a/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-driver.js ++++ b/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-driver.js +@@ -1,4 +1,5 @@ + /// ++import { SelectQueryNode } from '../../operation-node/select-query-node.js'; + import { CompiledQuery } from '../../query-compiler/compiled-query.js'; + import { freeze, isFunction } from '../../util/object-utils.js'; + export class SqliteDriver { +@@ -67,8 +68,20 @@ class SqliteConnection { + }); + } + } +- async *streamQuery() { +- throw new Error("Sqlite driver doesn't support streaming"); ++ async *streamQuery(compiledQuery, _chunkSize) { ++ const { sql, parameters, query } = compiledQuery; ++ const stmt = this.#db.prepare(sql); ++ if (SelectQueryNode.is(query)) { ++ const iter = stmt.iterate(parameters); ++ for (const row of iter) { ++ yield { ++ rows: [row], ++ }; ++ } ++ } ++ else { ++ throw new Error('Sqlite driver only supports streaming of select queries'); ++ } + } + } + class ConnectionMutex { +diff --git a/node_modules/kysely/dist/esm/driver/driver.d.ts b/node_modules/kysely/dist/esm/driver/driver.d.ts +index 00babcb..11d2d55 100644 +--- a/node_modules/kysely/dist/esm/driver/driver.d.ts ++++ b/node_modules/kysely/dist/esm/driver/driver.d.ts +@@ -40,5 +40,5 @@ export interface Driver { + export interface TransactionSettings { + readonly isolationLevel?: IsolationLevel; + } +-export declare const TRANSACTION_ISOLATION_LEVELS: readonly ["read uncommitted", "read committed", "repeatable read", "serializable"]; ++export declare const TRANSACTION_ISOLATION_LEVELS: readonly ["read uncommitted", "read committed", "repeatable read", "serializable", "snapshot"]; + export type IsolationLevel = ArrayItemType; +diff --git a/node_modules/kysely/dist/esm/driver/driver.js b/node_modules/kysely/dist/esm/driver/driver.js +index 88c2a07..2ae1469 100644 +--- a/node_modules/kysely/dist/esm/driver/driver.js ++++ b/node_modules/kysely/dist/esm/driver/driver.js +@@ -4,4 +4,5 @@ export const TRANSACTION_ISOLATION_LEVELS = [ + 'read committed', + 'repeatable read', + 'serializable', ++ 'snapshot', + ]; +diff --git a/node_modules/kysely/dist/esm/driver/single-connection-provider.js b/node_modules/kysely/dist/esm/driver/single-connection-provider.js +index aafebb7..ef341ee 100644 +--- a/node_modules/kysely/dist/esm/driver/single-connection-provider.js ++++ b/node_modules/kysely/dist/esm/driver/single-connection-provider.js +@@ -1,4 +1,5 @@ + /// ++const ignoreError = () => { }; + export class SingleConnectionProvider { + #connection; + #runningPromise; +@@ -7,17 +8,15 @@ export class SingleConnectionProvider { + } + async provideConnection(consumer) { + while (this.#runningPromise) { +- await this.#runningPromise; ++ await this.#runningPromise.catch(ignoreError); + } +- const promise = this.#run(consumer); +- this.#runningPromise = promise +- .then(() => { +- this.#runningPromise = undefined; +- }) +- .catch(() => { ++ // `#runningPromise` must be set to undefined before it's ++ // resolved or rejected. Otherwise the while loop above ++ // will misbehave. ++ this.#runningPromise = this.#run(consumer).finally(() => { + this.#runningPromise = undefined; + }); +- return promise; ++ return this.#runningPromise; + } + // Run the runner in an async function to make sure it doesn't + // throw synchronous errors. +diff --git a/node_modules/kysely/dist/esm/expression/expression-builder.d.ts b/node_modules/kysely/dist/esm/expression/expression-builder.d.ts +index 7b4a340..07933a1 100644 +--- a/node_modules/kysely/dist/esm/expression/expression-builder.d.ts ++++ b/node_modules/kysely/dist/esm/expression/expression-builder.d.ts +@@ -14,6 +14,7 @@ import { JSONPathBuilder } from '../query-builder/json-path-builder.js'; + import { OperandExpression } from '../parser/expression-parser.js'; + import { CallbackSelection, SelectCallback, SelectExpression, Selection } from '../parser/select-parser.js'; + import { RefTuple2, RefTuple3, RefTuple4, RefTuple5, ValTuple2, ValTuple3, ValTuple4, ValTuple5 } from '../parser/tuple-parser.js'; ++import { Selectable } from '../util/column-type.js'; + export interface ExpressionBuilder { + /** + * Creates a binary expression. +@@ -344,6 +345,30 @@ export interface ExpressionBuilder { + */ + ref>(reference: RE): ExpressionWrapper>; + ref>(reference: RE, op: JSONOperatorWith$): JSONPathBuilder>; ++ /** ++ * Creates a table reference. ++ * ++ * ```ts ++ * db.selectFrom('person') ++ * .innerJoin('pet', 'pet.owner_id', 'person.id') ++ * .select(eb => [ ++ * 'person.id', ++ * sql`jsonb_agg(${eb.table('pet')})`.as('pets') ++ * ]) ++ * .groupBy('person.id') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * select "person"."id", jsonb_agg("pet") as "pets" ++ * from "person" ++ * inner join "pet" on "pet"."owner_id" = "person"."id" ++ * group by "person"."id" ++ * ``` ++ */ ++ table(table: T): ExpressionWrapper>; + /** + * Returns a value expression. + * +diff --git a/node_modules/kysely/dist/esm/expression/expression-builder.js b/node_modules/kysely/dist/esm/expression/expression-builder.js +index f550460..86b0098 100644 +--- a/node_modules/kysely/dist/esm/expression/expression-builder.js ++++ b/node_modules/kysely/dist/esm/expression/expression-builder.js +@@ -1,7 +1,7 @@ + /// + import { createSelectQueryBuilder, } from '../query-builder/select-query-builder.js'; + import { SelectQueryNode } from '../operation-node/select-query-node.js'; +-import { parseTableExpressionOrList, } from '../parser/table-parser.js'; ++import { parseTableExpressionOrList, parseTable, } from '../parser/table-parser.js'; + import { WithSchemaPlugin } from '../plugin/with-schema/with-schema-plugin.js'; + import { createQueryId } from '../util/query-id.js'; + import { createFunctionModule, } from '../query-builder/function-module.js'; +@@ -11,7 +11,7 @@ import { ParensNode } from '../operation-node/parens-node.js'; + import { ExpressionWrapper } from './expression-wrapper.js'; + import { OperatorNode, } from '../operation-node/operator-node.js'; + import { parseUnaryOperation } from '../parser/unary-operation-parser.js'; +-import { parseSafeImmediateValue, parseValueExpression, parseValueExpressionOrList, } from '../parser/value-parser.js'; ++import { parseSafeImmediateValue, parseValueExpression, } from '../parser/value-parser.js'; + import { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js'; + import { CaseBuilder } from '../query-builder/case-builder.js'; + import { CaseNode } from '../operation-node/case-node.js'; +@@ -58,8 +58,11 @@ export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) { + } + return new JSONPathBuilder(parseJSONReference(reference, op)); + }, ++ table(table) { ++ return new ExpressionWrapper(parseTable(table)); ++ }, + val(value) { +- return new ExpressionWrapper(parseValueExpressionOrList(value)); ++ return new ExpressionWrapper(parseValueExpression(value)); + }, + refTuple(...values) { + return new ExpressionWrapper(TupleNode.create(values.map(parseReferenceExpression))); +diff --git a/node_modules/kysely/dist/esm/index.d.ts b/node_modules/kysely/dist/esm/index.d.ts +index cf166f8..37cf701 100644 +--- a/node_modules/kysely/dist/esm/index.d.ts ++++ b/node_modules/kysely/dist/esm/index.d.ts +@@ -72,6 +72,12 @@ export * from './dialect/postgres/postgres-dialect.js'; + export * from './dialect/sqlite/sqlite-query-compiler.js'; + export * from './dialect/sqlite/sqlite-introspector.js'; + export * from './dialect/sqlite/sqlite-adapter.js'; ++export * from './dialect/mssql/mssql-adapter.js'; ++export * from './dialect/mssql/mssql-dialect-config.js'; ++export * from './dialect/mssql/mssql-dialect.js'; ++export * from './dialect/mssql/mssql-driver.js'; ++export * from './dialect/mssql/mssql-introspector.js'; ++export * from './dialect/mssql/mssql-query-compiler.js'; + export * from './query-compiler/default-query-compiler.js'; + export * from './query-compiler/query-compiler.js'; + export * from './migration/migrator.js'; +@@ -176,7 +182,7 @@ export * from './util/compilable.js'; + export * from './util/explainable.js'; + export * from './util/streamable.js'; + export * from './util/log.js'; +-export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, Equals, UnknownRow, Simplify, SqlBool, } from './util/type-utils.js'; ++export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, Equals, UnknownRow, Simplify, SqlBool, Nullable, } from './util/type-utils.js'; + export * from './util/infer-result.js'; + export { logOnce } from './util/log-once.js'; + export { SelectExpression, SelectCallback, SelectArg, Selection, CallbackSelection, } from './parser/select-parser.js'; +diff --git a/node_modules/kysely/dist/esm/index.js b/node_modules/kysely/dist/esm/index.js +index 1033125..e4f5004 100644 +--- a/node_modules/kysely/dist/esm/index.js ++++ b/node_modules/kysely/dist/esm/index.js +@@ -73,6 +73,12 @@ export * from './dialect/postgres/postgres-dialect.js'; + export * from './dialect/sqlite/sqlite-query-compiler.js'; + export * from './dialect/sqlite/sqlite-introspector.js'; + export * from './dialect/sqlite/sqlite-adapter.js'; ++export * from './dialect/mssql/mssql-adapter.js'; ++export * from './dialect/mssql/mssql-dialect-config.js'; ++export * from './dialect/mssql/mssql-dialect.js'; ++export * from './dialect/mssql/mssql-driver.js'; ++export * from './dialect/mssql/mssql-introspector.js'; ++export * from './dialect/mssql/mssql-query-compiler.js'; + export * from './query-compiler/default-query-compiler.js'; + export * from './query-compiler/query-compiler.js'; + export * from './migration/migrator.js'; +diff --git a/node_modules/kysely/dist/esm/kysely.d.ts b/node_modules/kysely/dist/esm/kysely.d.ts +index 52e909a..8e45b8c 100644 +--- a/node_modules/kysely/dist/esm/kysely.d.ts ++++ b/node_modules/kysely/dist/esm/kysely.d.ts +@@ -66,7 +66,7 @@ export declare class Kysely extends QueryCreator implements QueryExecuto + /** + * Returns the {@link SchemaModule} module for building database schema. + */ +- get schema(): SchemaModule; ++ get schema(): SchemaModule; + /** + * Returns a the {@link DynamicModule} module. + * +diff --git a/node_modules/kysely/dist/esm/migration/migrator.js b/node_modules/kysely/dist/esm/migration/migrator.js +index 8c7a0b4..7d3a26a 100644 +--- a/node_modules/kysely/dist/esm/migration/migrator.js ++++ b/node_modules/kysely/dist/esm/migration/migrator.js +@@ -218,10 +218,7 @@ export class Migrator { + } + if (!(await this.#doesSchemaExists())) { + try { +- await this.#props.db.schema +- .createSchema(this.#migrationTableSchema) +- .ifNotExists() +- .execute(); ++ await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema)); + } + catch (error) { + // At least on PostgreSQL, `if not exists` doesn't guarantee the `create schema` +@@ -237,20 +234,15 @@ export class Migrator { + if (!(await this.#doesTableExists(this.#migrationTable))) { + try { + if (this.#migrationTableSchema) { +- await this.#props.db.schema +- .createSchema(this.#migrationTableSchema) +- .ifNotExists() +- .execute(); ++ await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema)); + } +- await this.#props.db.schema ++ await this.#createIfNotExists(this.#props.db.schema + .withPlugin(this.#schemaPlugin) + .createTable(this.#migrationTable) +- .ifNotExists() + .addColumn('name', 'varchar(255)', (col) => col.notNull().primaryKey()) + // The migration run time as ISO string. This is not a real date type as we + // can't know which data type is supported by all future dialects. +- .addColumn('timestamp', 'varchar(255)', (col) => col.notNull()) +- .execute(); ++ .addColumn('timestamp', 'varchar(255)', (col) => col.notNull())); + } + catch (error) { + // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table` +@@ -265,13 +257,11 @@ export class Migrator { + async #ensureMigrationLockTableExists() { + if (!(await this.#doesTableExists(this.#migrationLockTable))) { + try { +- await this.#props.db.schema ++ await this.#createIfNotExists(this.#props.db.schema + .withPlugin(this.#schemaPlugin) + .createTable(this.#migrationLockTable) +- .ifNotExists() + .addColumn('id', 'varchar(255)', (col) => col.notNull().primaryKey()) +- .addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0)) +- .execute(); ++ .addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0))); + } + catch (error) { + // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table` +@@ -479,6 +469,12 @@ export class Migrator { + } + return { results }; + } ++ async #createIfNotExists(qb) { ++ if (this.#props.db.getExecutor().adapter.supportsCreateIfNotExists) { ++ qb = qb.ifNotExists(); ++ } ++ await qb.execute(); ++ } + } + class MigrationResultSetError extends Error { + #resultSet; +diff --git a/node_modules/kysely/dist/esm/operation-node/add-index-node.d.ts b/node_modules/kysely/dist/esm/operation-node/add-index-node.d.ts +new file mode 100644 +index 0000000..b81f95f +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/add-index-node.d.ts +@@ -0,0 +1,21 @@ ++import { IdentifierNode } from './identifier-node.js'; ++import { OperationNode } from './operation-node.js'; ++import { RawNode } from './raw-node.js'; ++export type AddIndexNodeProps = Omit; ++export interface AddIndexNode extends OperationNode { ++ readonly kind: 'AddIndexNode'; ++ readonly name: IdentifierNode; ++ readonly columns?: OperationNode[]; ++ readonly unique?: boolean; ++ readonly using?: RawNode; ++ readonly ifNotExists?: boolean; ++} ++/** ++ * @internal ++ */ ++export declare const AddIndexNode: Readonly<{ ++ is(node: OperationNode): node is AddIndexNode; ++ create(name: string): AddIndexNode; ++ cloneWith(node: AddIndexNode, props: AddIndexNodeProps): AddIndexNode; ++ cloneWithColumns(node: AddIndexNode, columns: OperationNode[]): AddIndexNode; ++}>; +diff --git a/node_modules/kysely/dist/esm/operation-node/add-index-node.js b/node_modules/kysely/dist/esm/operation-node/add-index-node.js +new file mode 100644 +index 0000000..134b7d8 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/add-index-node.js +@@ -0,0 +1,29 @@ ++/// ++import { freeze } from '../util/object-utils.js'; ++import { IdentifierNode } from './identifier-node.js'; ++/** ++ * @internal ++ */ ++export const AddIndexNode = freeze({ ++ is(node) { ++ return node.kind === 'AddIndexNode'; ++ }, ++ create(name) { ++ return freeze({ ++ kind: 'AddIndexNode', ++ name: IdentifierNode.create(name) ++ }); ++ }, ++ cloneWith(node, props) { ++ return freeze({ ++ ...node, ++ ...props, ++ }); ++ }, ++ cloneWithColumns(node, columns) { ++ return freeze({ ++ ...node, ++ columns: [...(node.columns || []), ...columns], ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/esm/operation-node/alter-table-node.d.ts b/node_modules/kysely/dist/esm/operation-node/alter-table-node.d.ts +index 5b03535..b09aca3 100644 +--- a/node_modules/kysely/dist/esm/operation-node/alter-table-node.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/alter-table-node.d.ts +@@ -8,7 +8,9 @@ import { AlterColumnNode } from './alter-column-node.js'; + import { AddConstraintNode } from './add-constraint-node.js'; + import { DropConstraintNode } from './drop-constraint-node.js'; + import { ModifyColumnNode } from './modify-column-node.js'; +-export type AlterTableNodeTableProps = Pick; ++import { DropIndexNode } from './drop-index-node.js'; ++import { AddIndexNode } from './add-index-node.js'; ++export type AlterTableNodeTableProps = Pick; + export type AlterTableColumnAlterationNode = RenameColumnNode | AddColumnNode | DropColumnNode | AlterColumnNode | ModifyColumnNode; + export interface AlterTableNode extends OperationNode { + readonly kind: 'AlterTableNode'; +@@ -18,6 +20,8 @@ export interface AlterTableNode extends OperationNode { + readonly columnAlterations?: ReadonlyArray; + readonly addConstraint?: AddConstraintNode; + readonly dropConstraint?: DropConstraintNode; ++ readonly addIndex?: AddIndexNode; ++ readonly dropIndex?: DropIndexNode; + } + /** + * @internal +diff --git a/node_modules/kysely/dist/esm/operation-node/column-definition-node.d.ts b/node_modules/kysely/dist/esm/operation-node/column-definition-node.d.ts +index 6442d83..b518d35 100644 +--- a/node_modules/kysely/dist/esm/operation-node/column-definition-node.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/column-definition-node.d.ts +@@ -20,6 +20,7 @@ export interface ColumnDefinitionNode extends OperationNode { + readonly unsigned?: boolean; + readonly frontModifiers?: ReadonlyArray; + readonly endModifiers?: ReadonlyArray; ++ readonly nullsNotDistinct?: boolean; + } + /** + * @internal +diff --git a/node_modules/kysely/dist/esm/operation-node/column-update-node.d.ts b/node_modules/kysely/dist/esm/operation-node/column-update-node.d.ts +index 2e8ab34..bb59937 100644 +--- a/node_modules/kysely/dist/esm/operation-node/column-update-node.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/column-update-node.d.ts +@@ -1,8 +1,7 @@ +-import { ColumnNode } from './column-node.js'; + import { OperationNode } from './operation-node.js'; + export interface ColumnUpdateNode extends OperationNode { + readonly kind: 'ColumnUpdateNode'; +- readonly column: ColumnNode; ++ readonly column: OperationNode; + readonly value: OperationNode; + } + /** +@@ -10,5 +9,5 @@ export interface ColumnUpdateNode extends OperationNode { + */ + export declare const ColumnUpdateNode: Readonly<{ + is(node: OperationNode): node is ColumnUpdateNode; +- create(column: ColumnNode, value: OperationNode): ColumnUpdateNode; ++ create(column: OperationNode, value: OperationNode): ColumnUpdateNode; + }>; +diff --git a/node_modules/kysely/dist/esm/operation-node/create-index-node.d.ts b/node_modules/kysely/dist/esm/operation-node/create-index-node.d.ts +index a3a99d1..d474032 100644 +--- a/node_modules/kysely/dist/esm/operation-node/create-index-node.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/create-index-node.d.ts +@@ -14,6 +14,7 @@ export interface CreateIndexNode extends OperationNode { + readonly using?: RawNode; + readonly ifNotExists?: boolean; + readonly where?: WhereNode; ++ readonly nullsNotDistinct?: boolean; + } + /** + * @internal +diff --git a/node_modules/kysely/dist/esm/operation-node/create-table-node.d.ts b/node_modules/kysely/dist/esm/operation-node/create-table-node.d.ts +index cc8ceda..f36036c 100644 +--- a/node_modules/kysely/dist/esm/operation-node/create-table-node.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/create-table-node.d.ts +@@ -16,6 +16,7 @@ export interface CreateTableNode extends OperationNode { + readonly onCommit?: OnCommitAction; + readonly frontModifiers?: ReadonlyArray; + readonly endModifiers?: ReadonlyArray; ++ readonly selectQuery?: OperationNode; + } + /** + * @internal +diff --git a/node_modules/kysely/dist/esm/operation-node/create-trigger-node.d.ts b/node_modules/kysely/dist/esm/operation-node/create-trigger-node.d.ts +new file mode 100644 +index 0000000..8244954 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/create-trigger-node.d.ts +@@ -0,0 +1,34 @@ ++import { OperationNode } from './operation-node.js'; ++import { TableNode } from './table-node.js'; ++import { IdentifierNode } from './identifier-node.js'; ++import { QueryNode } from './query-node.js'; ++import { TriggerEventNode } from './trigger-event-node.js'; ++import { TriggerOrderNode } from './trigger-order-node.js'; ++import { FunctionNode } from './function-node.js'; ++export type TriggerTime = 'after' | 'before' | 'instead of'; ++export type CreateTriggerNodeParams = Omit; ++export interface CreateTriggerNode extends OperationNode { ++ readonly kind: 'CreateTriggerNode'; ++ readonly name: IdentifierNode; ++ readonly queries?: ReadonlyArray; ++ readonly function?: FunctionNode; ++ readonly time?: TriggerTime; ++ readonly events?: ReadonlyArray; ++ readonly table?: TableNode; ++ readonly orReplace?: boolean; ++ readonly ifNotExists?: boolean; ++ readonly when?: OperationNode; ++ readonly temporary?: boolean; ++ readonly forEach?: 'row' | 'statement'; ++ readonly order?: TriggerOrderNode; ++} ++/** ++ * @internal ++ */ ++export declare const CreateTriggerNode: Readonly<{ ++ is(node: OperationNode): node is CreateTriggerNode; ++ create(name: IdentifierNode): CreateTriggerNode; ++ cloneWithQuery(createTrigger: CreateTriggerNode, query: QueryNode): CreateTriggerNode; ++ cloneWithEvent(createTrigger: CreateTriggerNode, event: TriggerEventNode): CreateTriggerNode; ++ cloneWith(createTrigger: CreateTriggerNode, params: CreateTriggerNodeParams): CreateTriggerNode; ++}>; +diff --git a/node_modules/kysely/dist/esm/operation-node/create-trigger-node.js b/node_modules/kysely/dist/esm/operation-node/create-trigger-node.js +new file mode 100644 +index 0000000..90dd0f3 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/create-trigger-node.js +@@ -0,0 +1,34 @@ ++/// ++import { freeze } from '../util/object-utils.js'; ++/** ++ * @internal ++ */ ++export const CreateTriggerNode = freeze({ ++ is(node) { ++ return node.kind === 'CreateTriggerNode'; ++ }, ++ create(name) { ++ return freeze({ ++ kind: 'CreateTriggerNode', ++ name, ++ }); ++ }, ++ cloneWithQuery(createTrigger, query) { ++ return freeze({ ++ ...createTrigger, ++ queries: freeze([...(createTrigger.queries || []), query]), ++ }); ++ }, ++ cloneWithEvent(createTrigger, event) { ++ return freeze({ ++ ...createTrigger, ++ events: freeze([...(createTrigger.events || []), event]), ++ }); ++ }, ++ cloneWith(createTrigger, params) { ++ return freeze({ ++ ...createTrigger, ++ ...params, ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/esm/operation-node/drop-trigger-node.d.ts b/node_modules/kysely/dist/esm/operation-node/drop-trigger-node.d.ts +new file mode 100644 +index 0000000..4e38772 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/drop-trigger-node.d.ts +@@ -0,0 +1,17 @@ ++import { OperationNode } from './operation-node.js'; ++import { SchemableIdentifierNode } from './schemable-identifier-node.js'; ++export type DropTriggerNodeParams = Omit, 'kind' | 'name'>; ++export interface DropTriggerNode extends OperationNode { ++ readonly kind: 'DropTriggerNode'; ++ readonly name: SchemableIdentifierNode; ++ readonly ifExists?: boolean; ++ readonly cascade?: boolean; ++} ++/** ++ * @internal ++ */ ++export declare const DropTriggerNode: Readonly<{ ++ is(node: OperationNode): node is DropTriggerNode; ++ create(name: SchemableIdentifierNode): DropTriggerNode; ++ cloneWith(dropTrigger: DropTriggerNode, params: DropTriggerNodeParams): DropTriggerNode; ++}>; +diff --git a/node_modules/kysely/dist/esm/operation-node/drop-trigger-node.js b/node_modules/kysely/dist/esm/operation-node/drop-trigger-node.js +new file mode 100644 +index 0000000..ebabeb4 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/drop-trigger-node.js +@@ -0,0 +1,22 @@ ++/// ++import { freeze } from '../util/object-utils.js'; ++/** ++ * @internal ++ */ ++export const DropTriggerNode = freeze({ ++ is(node) { ++ return node.kind === 'DropTriggerNode'; ++ }, ++ create(name) { ++ return freeze({ ++ kind: 'DropTriggerNode', ++ name, ++ }); ++ }, ++ cloneWith(dropTrigger, params) { ++ return freeze({ ++ ...dropTrigger, ++ ...params, ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.d.ts b/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.d.ts +index 6b3a13c..5d7fd9d 100644 +--- a/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.d.ts +@@ -85,6 +85,11 @@ import { JSONPathNode } from './json-path-node.js'; + import { JSONPathLegNode } from './json-path-leg-node.js'; + import { JSONOperatorChainNode } from './json-operator-chain-node.js'; + import { TupleNode } from './tuple-node.js'; ++import { AddIndexNode } from './add-index-node.js'; ++import { CreateTriggerNode } from './create-trigger-node.js'; ++import { DropTriggerNode } from './drop-trigger-node.js'; ++import { TriggerEventNode } from './trigger-event-node.js'; ++import { TriggerOrderNode } from './trigger-order-node.js'; + /** + * Transforms an operation node tree into another one. + * +@@ -139,9 +144,13 @@ export declare class OperationNodeTransformer { + protected transformDeleteQuery(node: DeleteQueryNode): DeleteQueryNode; + protected transformReturning(node: ReturningNode): ReturningNode; + protected transformCreateTable(node: CreateTableNode): CreateTableNode; ++ protected transformCreateTrigger(node: CreateTriggerNode): CreateTriggerNode; ++ protected transformTriggerEvent(node: TriggerEventNode): TriggerEventNode; ++ protected transformTriggerOrder(node: TriggerOrderNode): TriggerOrderNode; + protected transformColumnDefinition(node: ColumnDefinitionNode): ColumnDefinitionNode; + protected transformAddColumn(node: AddColumnNode): AddColumnNode; + protected transformDropTable(node: DropTableNode): DropTableNode; ++ protected transformDropTrigger(node: DropTriggerNode): DropTriggerNode; + protected transformOrderBy(node: OrderByNode): OrderByNode; + protected transformOrderByItem(node: OrderByItemNode): OrderByItemNode; + protected transformGroupBy(node: GroupByNode): GroupByNode; +@@ -199,6 +208,7 @@ export declare class OperationNodeTransformer { + protected transformJSONPathLeg(node: JSONPathLegNode): JSONPathLegNode; + protected transformJSONOperatorChain(node: JSONOperatorChainNode): JSONOperatorChainNode; + protected transformTuple(node: TupleNode): TupleNode; ++ protected transformAddIndex(node: AddIndexNode): AddIndexNode; + protected transformDataType(node: DataTypeNode): DataTypeNode; + protected transformSelectAll(node: SelectAllNode): SelectAllNode; + protected transformIdentifier(node: IdentifierNode): IdentifierNode; +diff --git a/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.js b/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.js +index f35075b..9e216f8 100644 +--- a/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.js ++++ b/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.js +@@ -119,6 +119,11 @@ export class OperationNodeTransformer { + JSONPathLegNode: this.transformJSONPathLeg.bind(this), + JSONOperatorChainNode: this.transformJSONOperatorChain.bind(this), + TupleNode: this.transformTuple.bind(this), ++ AddIndexNode: this.transformAddIndex.bind(this), ++ CreateTriggerNode: this.transformCreateTrigger.bind(this), ++ TriggerEventNode: this.transformTriggerEvent.bind(this), ++ TriggerOrderNode: this.transformTriggerOrder.bind(this), ++ DropTriggerNode: this.transformDropTrigger.bind(this), + }); + transformNode(node) { + if (!node) { +@@ -295,6 +300,38 @@ export class OperationNodeTransformer { + onCommit: node.onCommit, + frontModifiers: this.transformNodeList(node.frontModifiers), + endModifiers: this.transformNodeList(node.endModifiers), ++ selectQuery: this.transformNode(node.selectQuery), ++ }); ++ } ++ transformCreateTrigger(node) { ++ return requireAllProps({ ++ kind: 'CreateTriggerNode', ++ name: this.transformNode(node.name), ++ table: this.transformNode(node.table), ++ ifNotExists: node.ifNotExists, ++ time: node.time, ++ events: this.transformNodeList(node.events), ++ forEach: node.forEach, ++ orReplace: node.orReplace, ++ temporary: node.temporary, ++ queries: this.transformNodeList(node.queries), ++ function: this.transformNode(node.function), ++ when: this.transformNode(node.when), ++ order: this.transformNode(node.order), ++ }); ++ } ++ transformTriggerEvent(node) { ++ return requireAllProps({ ++ kind: 'TriggerEventNode', ++ event: node.event, ++ columns: this.transformNodeList(node.columns), ++ }); ++ } ++ transformTriggerOrder(node) { ++ return requireAllProps({ ++ kind: 'TriggerOrderNode', ++ order: node.order, ++ otherTriggerName: this.transformNode(node.otherTriggerName), + }); + } + transformColumnDefinition(node) { +@@ -313,6 +350,7 @@ export class OperationNodeTransformer { + generated: this.transformNode(node.generated), + frontModifiers: this.transformNodeList(node.frontModifiers), + endModifiers: this.transformNodeList(node.endModifiers), ++ nullsNotDistinct: node.nullsNotDistinct, + }); + } + transformAddColumn(node) { +@@ -329,6 +367,14 @@ export class OperationNodeTransformer { + cascade: node.cascade, + }); + } ++ transformDropTrigger(node) { ++ return requireAllProps({ ++ kind: 'DropTriggerNode', ++ name: this.transformNode(node.name), ++ ifExists: node.ifExists, ++ cascade: node.cascade, ++ }); ++ } + transformOrderBy(node) { + return requireAllProps({ + kind: 'OrderByNode', +@@ -414,6 +460,7 @@ export class OperationNodeTransformer { + using: this.transformNode(node.using), + ifNotExists: node.ifNotExists, + where: this.transformNode(node.where), ++ nullsNotDistinct: node.nullsNotDistinct, + }); + } + transformList(node) { +@@ -443,6 +490,7 @@ export class OperationNodeTransformer { + kind: 'UniqueConstraintNode', + columns: this.transformNodeList(node.columns), + name: this.transformNode(node.name), ++ nullsNotDistinct: node.nullsNotDistinct, + }); + } + transformForeignKeyConstraint(node) { +@@ -531,6 +579,8 @@ export class OperationNodeTransformer { + columnAlterations: this.transformNodeList(node.columnAlterations), + addConstraint: this.transformNode(node.addConstraint), + dropConstraint: this.transformNode(node.dropConstraint), ++ addIndex: this.transformNode(node.addIndex), ++ dropIndex: this.transformNode(node.dropIndex), + }); + } + transformDropColumn(node) { +@@ -763,6 +813,16 @@ export class OperationNodeTransformer { + values: this.transformNodeList(node.values), + }); + } ++ transformAddIndex(node) { ++ return requireAllProps({ ++ kind: 'AddIndexNode', ++ name: this.transformNode(node.name), ++ columns: this.transformNodeList(node.columns), ++ unique: node.unique, ++ using: this.transformNode(node.using), ++ ifNotExists: node.ifNotExists, ++ }); ++ } + transformDataType(node) { + // An Object.freezed leaf node. No need to clone. + return node; +diff --git a/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.d.ts b/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.d.ts +index 7c267cd..6a66bc7 100644 +--- a/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.d.ts +@@ -85,6 +85,11 @@ import { JSONPathNode } from './json-path-node.js'; + import { JSONPathLegNode } from './json-path-leg-node.js'; + import { JSONOperatorChainNode } from './json-operator-chain-node.js'; + import { TupleNode } from './tuple-node.js'; ++import { AddIndexNode } from './add-index-node.js'; ++import { CreateTriggerNode } from './create-trigger-node.js'; ++import { DropTriggerNode } from './drop-trigger-node.js'; ++import { TriggerEventNode } from './trigger-event-node.js'; ++import { TriggerOrderNode } from './trigger-order-node.js'; + export declare abstract class OperationNodeVisitor { + #private; + protected readonly nodeStack: OperationNode[]; +@@ -108,9 +113,13 @@ export declare abstract class OperationNodeVisitor { + protected abstract visitDeleteQuery(node: DeleteQueryNode): void; + protected abstract visitReturning(node: ReturningNode): void; + protected abstract visitCreateTable(node: CreateTableNode): void; ++ protected abstract visitCreateTrigger(node: CreateTriggerNode): void; ++ protected abstract visitTriggerEvent(node: TriggerEventNode): void; ++ protected abstract visitTriggerOrder(node: TriggerOrderNode): void; + protected abstract visitAddColumn(node: AddColumnNode): void; + protected abstract visitColumnDefinition(node: ColumnDefinitionNode): void; + protected abstract visitDropTable(node: DropTableNode): void; ++ protected abstract visitDropTrigger(node: DropTriggerNode): void; + protected abstract visitOrderBy(node: OrderByNode): void; + protected abstract visitOrderByItem(node: OrderByItemNode): void; + protected abstract visitGroupBy(node: GroupByNode): void; +@@ -176,4 +185,5 @@ export declare abstract class OperationNodeVisitor { + protected abstract visitJSONPathLeg(node: JSONPathLegNode): void; + protected abstract visitJSONOperatorChain(node: JSONOperatorChainNode): void; + protected abstract visitTuple(node: TupleNode): void; ++ protected abstract visitAddIndex(node: AddIndexNode): void; + } +diff --git a/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.js b/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.js +index 7ded762..cc6431e 100644 +--- a/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.js ++++ b/node_modules/kysely/dist/esm/operation-node/operation-node-visitor.js +@@ -92,6 +92,11 @@ export class OperationNodeVisitor { + JSONPathLegNode: this.visitJSONPathLeg.bind(this), + JSONOperatorChainNode: this.visitJSONOperatorChain.bind(this), + TupleNode: this.visitTuple.bind(this), ++ AddIndexNode: this.visitAddIndex.bind(this), ++ CreateTriggerNode: this.visitCreateTrigger.bind(this), ++ TriggerEventNode: this.visitTriggerEvent.bind(this), ++ TriggerOrderNode: this.visitTriggerOrder.bind(this), ++ DropTriggerNode: this.visitDropTrigger.bind(this), + }); + visitNode = (node) => { + this.nodeStack.push(node); +diff --git a/node_modules/kysely/dist/esm/operation-node/operation-node.d.ts b/node_modules/kysely/dist/esm/operation-node/operation-node.d.ts +index 24cad68..a01b9ed 100644 +--- a/node_modules/kysely/dist/esm/operation-node/operation-node.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/operation-node.d.ts +@@ -1,4 +1,4 @@ +-export type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode' | 'AggregateFunctionNode' | 'OverNode' | 'PartitionByNode' | 'PartitionByItemNode' | 'SetOperationNode' | 'BinaryOperationNode' | 'UnaryOperationNode' | 'UsingNode' | 'FunctionNode' | 'CaseNode' | 'WhenNode' | 'JSONReferenceNode' | 'JSONPathNode' | 'JSONPathLegNode' | 'JSONOperatorChainNode' | 'TupleNode'; ++export type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode' | 'AggregateFunctionNode' | 'OverNode' | 'PartitionByNode' | 'PartitionByItemNode' | 'SetOperationNode' | 'BinaryOperationNode' | 'UnaryOperationNode' | 'UsingNode' | 'FunctionNode' | 'CaseNode' | 'WhenNode' | 'JSONReferenceNode' | 'JSONPathNode' | 'JSONPathLegNode' | 'JSONOperatorChainNode' | 'TupleNode' | 'AddIndexNode' | 'CreateTriggerNode' | 'TriggerEventNode' | 'TriggerOrderNode' | 'DropTriggerNode'; + export interface OperationNode { + readonly kind: OperationNodeKind; + } +diff --git a/node_modules/kysely/dist/esm/operation-node/operator-node.d.ts b/node_modules/kysely/dist/esm/operation-node/operator-node.d.ts +index 1076866..18b6e05 100644 +--- a/node_modules/kysely/dist/esm/operation-node/operator-node.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/operator-node.d.ts +@@ -1,11 +1,11 @@ + import { OperationNode } from './operation-node.js'; +-export declare const COMPARISON_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp"]; ++export declare const COMPARISON_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from"]; + export declare const ARITHMETIC_OPERATORS: readonly ["+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>"]; + export declare const JSON_OPERATORS: readonly ["->", "->>"]; +-export declare const BINARY_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"]; ++export declare const BINARY_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"]; + export declare const UNARY_FILTER_OPERATORS: readonly ["exists", "not exists"]; + export declare const UNARY_OPERATORS: readonly ["not", "-", "exists", "not exists"]; +-export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "not", "-", "exists", "not exists", "between", "between symmetric"]; ++export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "not", "-", "exists", "not exists", "between", "between symmetric"]; + export type ComparisonOperator = (typeof COMPARISON_OPERATORS)[number]; + export type ArithmeticOperator = (typeof ARITHMETIC_OPERATORS)[number]; + export type JSONOperator = (typeof JSON_OPERATORS)[number]; +diff --git a/node_modules/kysely/dist/esm/operation-node/operator-node.js b/node_modules/kysely/dist/esm/operation-node/operator-node.js +index ba655e6..2df5b92 100644 +--- a/node_modules/kysely/dist/esm/operation-node/operator-node.js ++++ b/node_modules/kysely/dist/esm/operation-node/operator-node.js +@@ -35,6 +35,8 @@ export const COMPARISON_OPERATORS = [ + '!!', + '<->', + 'regexp', ++ 'is distinct from', ++ 'is not distinct from', + ]; + export const ARITHMETIC_OPERATORS = [ + '+', +diff --git a/node_modules/kysely/dist/esm/operation-node/trigger-event-node.d.ts b/node_modules/kysely/dist/esm/operation-node/trigger-event-node.d.ts +new file mode 100644 +index 0000000..8a3677d +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/trigger-event-node.d.ts +@@ -0,0 +1,15 @@ ++import { OperationNode } from './operation-node.js'; ++export type TriggerEvent = 'delete' | 'update' | 'insert' | 'truncate'; ++export type TriggerEventNodeParams = Omit; ++export interface TriggerEventNode extends OperationNode { ++ readonly kind: 'TriggerEventNode'; ++ readonly event: TriggerEvent; ++ readonly columns?: ReadonlyArray; ++} ++/** ++ * @internal ++ */ ++export declare const TriggerEventNode: Readonly<{ ++ is(node: OperationNode): node is TriggerEventNode; ++ create(event: TriggerEvent, columns?: ReadonlyArray): TriggerEventNode; ++}>; +diff --git a/node_modules/kysely/dist/esm/operation-node/trigger-event-node.js b/node_modules/kysely/dist/esm/operation-node/trigger-event-node.js +new file mode 100644 +index 0000000..6f97ee3 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/trigger-event-node.js +@@ -0,0 +1,17 @@ ++/// ++import { freeze } from '../util/object-utils.js'; ++/** ++ * @internal ++ */ ++export const TriggerEventNode = freeze({ ++ is(node) { ++ return node.kind === 'TriggerEventNode'; ++ }, ++ create(event, columns) { ++ return freeze({ ++ kind: 'TriggerEventNode', ++ event, ++ columns, ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/esm/operation-node/trigger-order-node.d.ts b/node_modules/kysely/dist/esm/operation-node/trigger-order-node.d.ts +new file mode 100644 +index 0000000..12bad8d +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/trigger-order-node.d.ts +@@ -0,0 +1,16 @@ ++import { IdentifierNode } from './identifier-node.js'; ++import { OperationNode } from './operation-node.js'; ++export type TriggerOrder = 'follows' | 'precedes'; ++export type TriggerOrderNodeParams = Omit; ++export interface TriggerOrderNode extends OperationNode { ++ readonly kind: 'TriggerOrderNode'; ++ readonly order: TriggerOrder; ++ readonly otherTriggerName: IdentifierNode; ++} ++/** ++ * @internal ++ */ ++export declare const TriggerOrderNode: Readonly<{ ++ is(node: OperationNode): node is TriggerOrderNode; ++ create(order: TriggerOrder, otherTriggerName: IdentifierNode): TriggerOrderNode; ++}>; +diff --git a/node_modules/kysely/dist/esm/operation-node/trigger-order-node.js b/node_modules/kysely/dist/esm/operation-node/trigger-order-node.js +new file mode 100644 +index 0000000..eea5441 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/operation-node/trigger-order-node.js +@@ -0,0 +1,17 @@ ++/// ++import { freeze } from '../util/object-utils.js'; ++/** ++ * @internal ++ */ ++export const TriggerOrderNode = freeze({ ++ is(node) { ++ return node.kind === 'TriggerOrderNode'; ++ }, ++ create(order, otherTriggerName) { ++ return freeze({ ++ kind: 'TriggerOrderNode', ++ order, ++ otherTriggerName, ++ }); ++ }, ++}); +diff --git a/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.d.ts b/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.d.ts +index c179f1f..4a544de 100644 +--- a/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.d.ts ++++ b/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.d.ts +@@ -5,11 +5,14 @@ export interface UniqueConstraintNode extends OperationNode { + readonly kind: 'UniqueConstraintNode'; + readonly columns: ReadonlyArray; + readonly name?: IdentifierNode; ++ readonly nullsNotDistinct?: boolean; + } ++export type UniqueConstraintNodeProps = Omit, 'kind'>; + /** + * @internal + */ + export declare const UniqueConstraintNode: Readonly<{ + is(node: OperationNode): node is UniqueConstraintNode; +- create(columns: string[], constraintName?: string): UniqueConstraintNode; ++ create(columns: string[], constraintName?: string, nullsNotDistinct?: boolean): UniqueConstraintNode; ++ cloneWith(node: UniqueConstraintNode, props: UniqueConstraintNodeProps): UniqueConstraintNode; + }>; +diff --git a/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.js b/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.js +index 0c903a6..d05e623 100644 +--- a/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.js ++++ b/node_modules/kysely/dist/esm/operation-node/unique-constraint-node.js +@@ -9,11 +9,18 @@ export const UniqueConstraintNode = freeze({ + is(node) { + return node.kind === 'UniqueConstraintNode'; + }, +- create(columns, constraintName) { ++ create(columns, constraintName, nullsNotDistinct) { + return freeze({ + kind: 'UniqueConstraintNode', + columns: freeze(columns.map(ColumnNode.create)), + name: constraintName ? IdentifierNode.create(constraintName) : undefined, ++ nullsNotDistinct, ++ }); ++ }, ++ cloneWith(node, props) { ++ return freeze({ ++ ...node, ++ ...props, + }); + }, + }); +diff --git a/node_modules/kysely/dist/esm/parser/binary-operation-parser.js b/node_modules/kysely/dist/esm/parser/binary-operation-parser.js +index 7c6e042..b136830 100644 +--- a/node_modules/kysely/dist/esm/parser/binary-operation-parser.js ++++ b/node_modules/kysely/dist/esm/parser/binary-operation-parser.js +@@ -35,7 +35,7 @@ export function parseFilterObject(obj, combinator) { + export function parseFilterList(list, combinator) { + const combine = combinator === 'and' ? AndNode.create : OrNode.create; + if (list.length === 0) { +- return ValueNode.createImmediate(combinator === 'and'); ++ return BinaryOperationNode.create(ValueNode.createImmediate(1), OperatorNode.create('='), ValueNode.createImmediate(combinator === 'and' ? 1 : 0)); + } + let node = toOperationNode(list[0]); + for (let i = 1; i < list.length; ++i) { +diff --git a/node_modules/kysely/dist/esm/parser/reference-parser.d.ts b/node_modules/kysely/dist/esm/parser/reference-parser.d.ts +index cd4d656..08204c7 100644 +--- a/node_modules/kysely/dist/esm/parser/reference-parser.d.ts ++++ b/node_modules/kysely/dist/esm/parser/reference-parser.d.ts +@@ -16,7 +16,8 @@ export type StringReference = AnyColumn | AnyCo + export type SimpleReferenceExpression = StringReference | DynamicReferenceBuilder; + export type ReferenceExpression = SimpleReferenceExpression | ExpressionOrFactory; + export type ReferenceExpressionOrList = ReferenceExpression | ReadonlyArray>; +-export type ExtractTypeFromReferenceExpression = RE extends string ? SelectType> : RE extends SelectQueryBuilderExpression ? O[keyof O] | null : RE extends (qb: any) => SelectQueryBuilderExpression ? O[keyof O] | null : RE extends Expression ? O : RE extends (qb: any) => Expression ? O : DV; ++export type ExtractTypeFromReferenceExpression = SelectType>; ++export type ExtractRawTypeFromReferenceExpression = RE extends string ? ExtractTypeFromStringReference : RE extends SelectQueryBuilderExpression ? O[keyof O] | null : RE extends (qb: any) => SelectQueryBuilderExpression ? O[keyof O] | null : RE extends Expression ? O : RE extends (qb: any) => Expression ? O : DV; + export type ExtractTypeFromStringReference = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends AnyColumn ? ExtractColumnType : DV; + export type OrderedColumnName = C extends `${string} ${infer O}` ? O extends OrderByDirection ? C : never : C; + export type ExtractColumnNameFromOrderedColumnName = C extends `${infer CL} ${infer O}` ? O extends OrderByDirection ? CL : never : C; +diff --git a/node_modules/kysely/dist/esm/parser/update-set-parser.d.ts b/node_modules/kysely/dist/esm/parser/update-set-parser.d.ts +index d4b2dd0..2763b7c 100644 +--- a/node_modules/kysely/dist/esm/parser/update-set-parser.d.ts ++++ b/node_modules/kysely/dist/esm/parser/update-set-parser.d.ts +@@ -2,9 +2,12 @@ import { ColumnUpdateNode } from '../operation-node/column-update-node.js'; + import { ExpressionBuilder } from '../expression/expression-builder.js'; + import { UpdateKeys, UpdateType } from '../util/column-type.js'; + import { ValueExpression } from './value-parser.js'; ++import { ExtractRawTypeFromReferenceExpression, ReferenceExpression } from './reference-parser.js'; + export type UpdateObject = { + [C in UpdateKeys]?: ValueExpression> | undefined; + }; + export type UpdateObjectFactory = (eb: ExpressionBuilder) => UpdateObject; +-export type UpdateExpression = UpdateObject | UpdateObjectFactory; +-export declare function parseUpdateExpression(update: UpdateExpression): ReadonlyArray; ++export type UpdateObjectExpression = UpdateObject | UpdateObjectFactory; ++export type ExtractUpdateTypeFromReferenceExpression = UpdateType>; ++export declare function parseUpdate(...args: [UpdateObjectExpression] | [ReferenceExpression, ValueExpression]): ReadonlyArray; ++export declare function parseUpdateObjectExpression(update: UpdateObjectExpression): ReadonlyArray; +diff --git a/node_modules/kysely/dist/esm/parser/update-set-parser.js b/node_modules/kysely/dist/esm/parser/update-set-parser.js +index 495e092..e644c94 100644 +--- a/node_modules/kysely/dist/esm/parser/update-set-parser.js ++++ b/node_modules/kysely/dist/esm/parser/update-set-parser.js +@@ -4,7 +4,16 @@ import { ColumnUpdateNode } from '../operation-node/column-update-node.js'; + import { expressionBuilder, } from '../expression/expression-builder.js'; + import { isFunction } from '../util/object-utils.js'; + import { parseValueExpression } from './value-parser.js'; +-export function parseUpdateExpression(update) { ++import { parseReferenceExpression, } from './reference-parser.js'; ++export function parseUpdate(...args) { ++ if (args.length === 2) { ++ return [ ++ ColumnUpdateNode.create(parseReferenceExpression(args[0]), parseValueExpression(args[1])), ++ ]; ++ } ++ return parseUpdateObjectExpression(args[0]); ++} ++export function parseUpdateObjectExpression(update) { + const updateObj = isFunction(update) ? update(expressionBuilder()) : update; + return Object.entries(updateObj) + .filter(([_, value]) => value !== undefined) +diff --git a/node_modules/kysely/dist/esm/plugin/with-schema/with-schema-transformer.js b/node_modules/kysely/dist/esm/plugin/with-schema/with-schema-transformer.js +index 0ccc8a1..6e212e6 100644 +--- a/node_modules/kysely/dist/esm/plugin/with-schema/with-schema-transformer.js ++++ b/node_modules/kysely/dist/esm/plugin/with-schema/with-schema-transformer.js +@@ -17,12 +17,14 @@ const ROOT_OPERATION_NODES = freeze({ + CreateTableNode: true, + CreateTypeNode: true, + CreateViewNode: true, ++ CreateTriggerNode: true, + DeleteQueryNode: true, + DropIndexNode: true, + DropSchemaNode: true, + DropTableNode: true, + DropTypeNode: true, + DropViewNode: true, ++ DropTriggerNode: true, + InsertQueryNode: true, + RawNode: true, + SelectQueryNode: true, +diff --git a/node_modules/kysely/dist/esm/query-builder/function-module.d.ts b/node_modules/kysely/dist/esm/query-builder/function-module.d.ts +index 592c5e9..8f326c1 100644 +--- a/node_modules/kysely/dist/esm/query-builder/function-module.d.ts ++++ b/node_modules/kysely/dist/esm/query-builder/function-module.d.ts +@@ -7,6 +7,7 @@ import { KyselyTypeError } from '../util/type-error.js'; + import { Equals, IsAny } from '../util/type-utils.js'; + import { AggregateFunctionBuilder } from './aggregate-function-builder.js'; + import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js'; ++import { Selectable } from '../util/column-type.js'; + /** + * Helpers for type safe SQL function calls. + * +@@ -17,21 +18,47 @@ import { SelectQueryBuilderExpression } from '../query-builder/select-query-buil + * + * + * +- * This example uses the `fn` module to select some aggregates: ++ * This example shows how to create function calls. These examples also work in any ++ * other place (`where` calls, updates, inserts etc.). The only difference is that you ++ * leave out the alias (the `as` call) if you use these in any other place than `select`. + * + * ```ts ++ * import { sql } from 'kysely' ++ * + * const result = await db.selectFrom('person') + * .innerJoin('pet', 'pet.owner_id', 'person.id') +- * .select(({ fn }) => [ ++ * .select(({ fn, val, ref }) => [ + * 'person.id', + * + * // The `fn` module contains the most common + * // functions. + * fn.count('pet.id').as('pet_count'), + * +- * // You can call any function using the +- * // `agg` method +- * fn.agg('array_agg', ['pet.name']).as('pet_names') ++ * // You can call any function by calling `fn` ++ * // directly. The arguments are treated as column ++ * // references by default. If you want to pass in ++ * // values, use the `val` function. ++ * fn('concat', [ ++ * val('Ms. '), ++ * 'first_name', ++ * val(' '), ++ * 'last_name' ++ * ]).as('full_name_with_title'), ++ * ++ * // You can call any aggregate function using the ++ * // `fn.agg` function. ++ * fn.agg('array_agg', ['pet.name']).as('pet_names'), ++ * ++ * // And once again, you can use the `sql` ++ * // template tag. The template tag substitutions ++ * // are treated as values by default. If you want ++ * // to reference columns, you can use the `ref` ++ * // function. ++ * sql`concat( ++ * ${ref('first_name')}, ++ * ' ', ++ * ${ref('last_name')} ++ * )`.as('full_name') + * ]) + * .groupBy('person.id') + * .having((eb) => eb.fn.count('pet.id'), '>', 10) +@@ -44,11 +71,13 @@ import { SelectQueryBuilderExpression } from '../query-builder/select-query-buil + * select + * "person"."id", + * count("pet"."id") as "pet_count", +- * array_agg("pet"."name") as "pet_names" ++ * concat($1, "first_name", $2, "last_name") as "full_name_with_title", ++ * array_agg("pet"."name") as "pet_names", ++ * concat("first_name", ' ', "last_name") as "full_name" + * from "person" + * inner join "pet" on "pet"."owner_id" = "person"."id" + * group by "person"."id" +- * having count("pet"."id") > $1 ++ * having count("pet"."id") > $3 + * ``` + */ + export interface FunctionModule { +@@ -540,6 +569,50 @@ export interface FunctionModule { + any>(expr: RE): Exclude, null> extends ReadonlyArray ? ExpressionWrapper : KyselyTypeError<'any(expr) call failed: expr must be an array'>; + any(subquery: SelectQueryBuilderExpression>): ExpressionWrapper; + any(expr: Expression>): ExpressionWrapper; ++ /** ++ * Creates a json_agg function call. ++ * ++ * This function is only available on PostgreSQL. ++ * ++ * ```ts ++ * db.selectFrom('person') ++ * .innerJoin('pet', 'pet.owner_id', 'person.id') ++ * .select((eb) => ['first_name', eb.fn.jsonAgg('pet').as('pets')]) ++ * .groupBy('person.first_name') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * select "first_name", json_agg("pet") as "pets" ++ * from "person" ++ * inner join "pet" on "pet"."owner_id" = "person"."id" ++ * group by "person"."first_name" ++ * ``` ++ */ ++ jsonAgg>(table: T): AggregateFunctionBuilder[] : T extends Expression ? O[] : never>; ++ /** ++ * Creates a to_json function call. ++ * ++ * This function is only available on PostgreSQL. ++ * ++ * ```ts ++ * db.selectFrom('person') ++ * .innerJoin('pet', 'pet.owner_id', 'person.id') ++ * .select((eb) => ['first_name', eb.fn.toJson('pet').as('pet')]) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * select "first_name", to_json("pet") as "pet" ++ * from "person" ++ * inner join "pet" on "pet"."owner_id" = "person"."id" ++ * ``` ++ */ ++ toJson>(table: T): ExpressionWrapper : T extends Expression ? O : never>; + } + export declare function createFunctionModule(): FunctionModule; + type OutputBoundStringReference, O> = IsAny extends true ? C : Equals | null, O | null> extends true ? C : never; +diff --git a/node_modules/kysely/dist/esm/query-builder/function-module.js b/node_modules/kysely/dist/esm/query-builder/function-module.js +index 7e1d28d..3744008 100644 +--- a/node_modules/kysely/dist/esm/query-builder/function-module.js ++++ b/node_modules/kysely/dist/esm/query-builder/function-module.js +@@ -5,6 +5,8 @@ import { FunctionNode } from '../operation-node/function-node.js'; + import { parseReferenceExpressionOrList, } from '../parser/reference-parser.js'; + import { parseSelectAll } from '../parser/select-parser.js'; + import { AggregateFunctionBuilder } from './aggregate-function-builder.js'; ++import { isString } from '../util/object-utils.js'; ++import { parseTable } from '../parser/table-parser.js'; + export function createFunctionModule() { + const fn = (name, args) => { + return new ExpressionWrapper(FunctionNode.create(name, parseReferenceExpressionOrList(args))); +@@ -42,5 +44,17 @@ export function createFunctionModule() { + any(column) { + return fn('any', [column]); + }, ++ jsonAgg(table) { ++ return new AggregateFunctionBuilder({ ++ aggregateFunctionNode: AggregateFunctionNode.create('json_agg', [ ++ isString(table) ? parseTable(table) : table.toOperationNode(), ++ ]), ++ }); ++ }, ++ toJson(table) { ++ return new ExpressionWrapper(FunctionNode.create('to_json', [ ++ isString(table) ? parseTable(table) : table.toOperationNode(), ++ ])); ++ }, + }); + } +diff --git a/node_modules/kysely/dist/esm/query-builder/insert-query-builder.d.ts b/node_modules/kysely/dist/esm/query-builder/insert-query-builder.d.ts +index 6be4113..ffc6c3f 100644 +--- a/node_modules/kysely/dist/esm/query-builder/insert-query-builder.d.ts ++++ b/node_modules/kysely/dist/esm/query-builder/insert-query-builder.d.ts +@@ -5,7 +5,7 @@ import { InsertObjectOrList, InsertObjectOrListFactory } from '../parser/insert- + import { InsertQueryNode } from '../operation-node/insert-query-node.js'; + import { QueryNode } from '../operation-node/query-node.js'; + import { NarrowPartial, SimplifyResult, SimplifySingleResult } from '../util/type-utils.js'; +-import { UpdateExpression } from '../parser/update-set-parser.js'; ++import { UpdateObjectExpression } from '../parser/update-set-parser.js'; + import { Compilable } from '../util/compilable.js'; + import { QueryExecutor } from '../query-executor/query-executor.js'; + import { QueryId } from '../util/query-id.js'; +@@ -60,13 +60,18 @@ export declare class InsertQueryBuilder implements R + * }) + * .executeTakeFirst() + * ++ * // `insertId` is only available on dialects that ++ * // automatically return the id of the inserted row ++ * // such as MySQL and SQLite. On PostgreSQL, for example, ++ * // you need to add a `returning` clause to the query to ++ * // get anything out. See the "returning data" example. + * console.log(result.insertId) + * ``` + * +- * The generated SQL (PostgreSQL): ++ * The generated SQL (MySQL): + * + * ```sql +- * insert into "person" ("first_name", "last_name", "age") values ($1, $2, $3) ++ * insert into `person` (`first_name`, `last_name`, `age`) values (?, ?, ?) + * ``` + * + * +@@ -131,11 +136,14 @@ export declare class InsertQueryBuilder implements R + * ```ts + * import { sql } from 'kysely' + * ++ * const ani = "Ani" ++ * const ston = "ston" ++ * + * const result = await db + * .insertInto('person') + * .values(({ ref, selectFrom, fn }) => ({ + * first_name: 'Jennifer', +- * last_name: sql`${'Ani'} || ${'ston'}`, ++ * last_name: sql`concat(${ani}, ${ston})`, + * middle_name: ref('first_name'), + * age: selectFrom('person') + * .select(fn.avg('age') +@@ -147,8 +155,18 @@ export declare class InsertQueryBuilder implements R + * The generated SQL (PostgreSQL): + * + * ```sql +- * insert into "person" ("first_name", "last_name", "age") +- * values ($1, $2 || $3, (select avg("age") as "avg_age" from "person")) ++ * insert into "person" ( ++ * "first_name", ++ * "last_name", ++ * "middle_name", ++ * "age" ++ * ) ++ * values ( ++ * $1, ++ * concat($2, $3), ++ * "first_name", ++ * (select avg("age") as "avg_age" from "person") ++ * ) + * ``` + * + * You can also use the callback version of subqueries or raw expressions: +@@ -208,7 +226,7 @@ export declare class InsertQueryBuilder implements R + * .select((eb) => [ + * 'pet.name', + * eb.val('Petson').as('last_name'), +- * eb.val(7).as('age'), ++ * eb.lit(7).as('age'), + * ]) + * ) + * .execute() +@@ -218,7 +236,7 @@ export declare class InsertQueryBuilder implements R + * + * ```sql + * insert into "person" ("first_name", "last_name", "age") +- * select "pet"."name", $1 as "first_name", $2 as "last_name" from "pet" ++ * select "pet"."name", $1 as "last_name", 7 as "age from "pet" + * ``` + */ + expression(expression: ExpressionOrFactory): InsertQueryBuilder; +@@ -414,7 +432,7 @@ export declare class InsertQueryBuilder implements R + * .onDuplicateKeyUpdate({ species: 'hamster' }) + * ``` + */ +- onDuplicateKeyUpdate(update: UpdateExpression): InsertQueryBuilder; ++ onDuplicateKeyUpdate(update: UpdateObjectExpression): InsertQueryBuilder; + /** + * Allows you to return data from modified rows. + * +diff --git a/node_modules/kysely/dist/esm/query-builder/insert-query-builder.js b/node_modules/kysely/dist/esm/query-builder/insert-query-builder.js +index 3cd23c3..d9f1cc8 100644 +--- a/node_modules/kysely/dist/esm/query-builder/insert-query-builder.js ++++ b/node_modules/kysely/dist/esm/query-builder/insert-query-builder.js +@@ -3,7 +3,7 @@ import { parseSelectArg, parseSelectAll, } from '../parser/select-parser.js'; + import { parseInsertExpression, } from '../parser/insert-values-parser.js'; + import { InsertQueryNode } from '../operation-node/insert-query-node.js'; + import { QueryNode } from '../operation-node/query-node.js'; +-import { parseUpdateExpression, } from '../parser/update-set-parser.js'; ++import { parseUpdateObjectExpression, } from '../parser/update-set-parser.js'; + import { preventAwait } from '../util/prevent-await.js'; + import { freeze } from '../util/object-utils.js'; + import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js'; +@@ -75,7 +75,7 @@ export class InsertQueryBuilder { + * .select((eb) => [ + * 'pet.name', + * eb.val('Petson').as('last_name'), +- * eb.val(7).as('age'), ++ * eb.lit(7).as('age'), + * ]) + * ) + * .execute() +@@ -85,7 +85,7 @@ export class InsertQueryBuilder { + * + * ```sql + * insert into "person" ("first_name", "last_name", "age") +- * select "pet"."name", $1 as "first_name", $2 as "last_name" from "pet" ++ * select "pet"."name", $1 as "last_name", 7 as "age from "pet" + * ``` + */ + expression(expression) { +@@ -308,7 +308,7 @@ export class InsertQueryBuilder { + return new InsertQueryBuilder({ + ...this.#props, + queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, { +- onDuplicateKey: OnDuplicateKeyNode.create(parseUpdateExpression(update)), ++ onDuplicateKey: OnDuplicateKeyNode.create(parseUpdateObjectExpression(update)), + }), + }); + } +diff --git a/node_modules/kysely/dist/esm/query-builder/insert-result.d.ts b/node_modules/kysely/dist/esm/query-builder/insert-result.d.ts +index c16fb08..d22a9e5 100644 +--- a/node_modules/kysely/dist/esm/query-builder/insert-result.d.ts ++++ b/node_modules/kysely/dist/esm/query-builder/insert-result.d.ts +@@ -23,7 +23,14 @@ + */ + export declare class InsertResult { + /** +- * The auto incrementing primary key ++ * The auto incrementing primary key of the inserted row. ++ * ++ * This property can be undefined when the query contains an `on conflict` ++ * clause that makes the query succeed even when nothing gets inserted. ++ * ++ * This property is always undefined on dialects like PostgreSQL that ++ * don't return the inserted id by default. On those dialects you need ++ * to use the {@link ReturningInterface.returning | returning} method. + */ + readonly insertId: bigint | undefined; + /** +diff --git a/node_modules/kysely/dist/esm/query-builder/insert-result.js b/node_modules/kysely/dist/esm/query-builder/insert-result.js +index ba00de9..ff11e8c 100644 +--- a/node_modules/kysely/dist/esm/query-builder/insert-result.js ++++ b/node_modules/kysely/dist/esm/query-builder/insert-result.js +@@ -24,7 +24,14 @@ + */ + export class InsertResult { + /** +- * The auto incrementing primary key ++ * The auto incrementing primary key of the inserted row. ++ * ++ * This property can be undefined when the query contains an `on conflict` ++ * clause that makes the query succeed even when nothing gets inserted. ++ * ++ * This property is always undefined on dialects like PostgreSQL that ++ * don't return the inserted id by default. On those dialects you need ++ * to use the {@link ReturningInterface.returning | returning} method. + */ + insertId; + /** +diff --git a/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.d.ts b/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.d.ts +index 803563e..cfb9d96 100644 +--- a/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.d.ts ++++ b/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.d.ts +@@ -4,7 +4,7 @@ import { OperationNodeSource } from '../operation-node/operation-node-source.js' + import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js'; + import { ExpressionOrFactory } from '../parser/expression-parser.js'; + import { ReferenceExpression } from '../parser/reference-parser.js'; +-import { UpdateExpression } from '../parser/update-set-parser.js'; ++import { UpdateObjectExpression } from '../parser/update-set-parser.js'; + import { AnyColumn, SqlBool } from '../util/type-utils.js'; + import { WhereInterface } from './where-interface.js'; + export declare class OnConflictBuilder implements WhereInterface { +@@ -435,7 +435,7 @@ export declare class OnConflictBuilder implements Where + * ) + * ``` + */ +- doUpdateSet(update: UpdateExpression, OnConflictTables, OnConflictTables>): OnConflictUpdateBuilder, OnConflictTables>; ++ doUpdateSet(update: UpdateObjectExpression, OnConflictTables, OnConflictTables>): OnConflictUpdateBuilder, OnConflictTables>; + /** + * Simply calls the provided function passing `this` as the only argument. `$call` returns + * what the provided function returns. +diff --git a/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.js b/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.js +index bd95015..02c9135 100644 +--- a/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.js ++++ b/node_modules/kysely/dist/esm/query-builder/on-conflict-builder.js +@@ -3,7 +3,7 @@ import { ColumnNode } from '../operation-node/column-node.js'; + import { IdentifierNode } from '../operation-node/identifier-node.js'; + import { OnConflictNode } from '../operation-node/on-conflict-node.js'; + import { parseValueBinaryOperationOrExpression, parseReferentialBinaryOperation, } from '../parser/binary-operation-parser.js'; +-import { parseUpdateExpression, } from '../parser/update-set-parser.js'; ++import { parseUpdateObjectExpression, } from '../parser/update-set-parser.js'; + import { freeze } from '../util/object-utils.js'; + import { preventAwait } from '../util/prevent-await.js'; + export class OnConflictBuilder { +@@ -173,7 +173,7 @@ export class OnConflictBuilder { + return new OnConflictUpdateBuilder({ + ...this.#props, + onConflictNode: OnConflictNode.cloneWith(this.#props.onConflictNode, { +- updates: parseUpdateExpression(update), ++ updates: parseUpdateObjectExpression(update), + }), + }); + } +diff --git a/node_modules/kysely/dist/esm/query-builder/update-query-builder.d.ts b/node_modules/kysely/dist/esm/query-builder/update-query-builder.d.ts +index 3d30eed..a71462a 100644 +--- a/node_modules/kysely/dist/esm/query-builder/update-query-builder.d.ts ++++ b/node_modules/kysely/dist/esm/query-builder/update-query-builder.d.ts +@@ -8,7 +8,7 @@ import { ReferenceExpression } from '../parser/reference-parser.js'; + import { QueryNode } from '../operation-node/query-node.js'; + import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js'; + import { UpdateQueryNode } from '../operation-node/update-query-node.js'; +-import { UpdateObject, UpdateObjectFactory } from '../parser/update-set-parser.js'; ++import { UpdateObject, UpdateObjectFactory, ExtractUpdateTypeFromReferenceExpression } from '../parser/update-set-parser.js'; + import { Compilable } from '../util/compilable.js'; + import { QueryExecutor } from '../query-executor/query-executor.js'; + import { QueryId } from '../util/query-id.js'; +@@ -24,6 +24,7 @@ import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../p + import { KyselyTypeError } from '../util/type-error.js'; + import { Streamable } from '../util/streamable.js'; + import { ExpressionOrFactory } from '../parser/expression-parser.js'; ++import { ValueExpression } from '../parser/value-parser.js'; + export declare class UpdateQueryBuilder implements WhereInterface, ReturningInterface, OperationNodeSource, Compilable, Explainable, Streamable { + #private; + constructor(props: UpdateQueryBuilderProps); +@@ -625,6 +626,20 @@ export declare class UpdateQueryBuilder eb.val('61710)) ++ * .where('id', '=', '1') ++ * .executeTakeFirst() ++ * ``` ++ * + * On PostgreSQL you can chain `returning` to the query to get + * the updated rows' columns (or any other expression) as the + * return value: +@@ -682,6 +697,7 @@ export declare class UpdateQueryBuilder): UpdateQueryBuilder; + set(update: UpdateObjectFactory): UpdateQueryBuilder; ++ set>(key: RE, value: ValueExpression>): UpdateQueryBuilder; + /** + * Allows you to return data from modified rows. + * +diff --git a/node_modules/kysely/dist/esm/query-builder/update-query-builder.js b/node_modules/kysely/dist/esm/query-builder/update-query-builder.js +index b20c740..6487ecf 100644 +--- a/node_modules/kysely/dist/esm/query-builder/update-query-builder.js ++++ b/node_modules/kysely/dist/esm/query-builder/update-query-builder.js +@@ -4,7 +4,7 @@ import { parseTableExpressionOrList, } from '../parser/table-parser.js'; + import { parseSelectArg, parseSelectAll, } from '../parser/select-parser.js'; + import { QueryNode } from '../operation-node/query-node.js'; + import { UpdateQueryNode } from '../operation-node/update-query-node.js'; +-import { parseUpdateExpression, } from '../parser/update-set-parser.js'; ++import { parseUpdate, } from '../parser/update-set-parser.js'; + import { preventAwait } from '../util/prevent-await.js'; + import { freeze } from '../util/object-utils.js'; + import { UpdateResult } from './update-result.js'; +@@ -63,10 +63,10 @@ export class UpdateQueryBuilder { + queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)), + }); + } +- set(update) { ++ set(...args) { + return new UpdateQueryBuilder({ + ...this.#props, +- queryNode: UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, parseUpdateExpression(update)), ++ queryNode: UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, parseUpdate(...args)), + }); + } + returning(selection) { +diff --git a/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.d.ts b/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.d.ts +index dbd954a..2f73125 100644 +--- a/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.d.ts ++++ b/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.d.ts +@@ -48,7 +48,7 @@ import { RootOperationNode, QueryCompiler } from './query-compiler.js'; + import { HavingNode } from '../operation-node/having-node.js'; + import { CreateSchemaNode } from '../operation-node/create-schema-node.js'; + import { DropSchemaNode } from '../operation-node/drop-schema-node.js'; +-import { AlterTableNode } from '../operation-node/alter-table-node.js'; ++import { AlterTableColumnAlterationNode, AlterTableNode } from '../operation-node/alter-table-node.js'; + import { DropColumnNode } from '../operation-node/drop-column-node.js'; + import { RenameColumnNode } from '../operation-node/rename-column-node.js'; + import { AlterColumnNode } from '../operation-node/alter-column-node.js'; +@@ -88,6 +88,11 @@ import { JSONPathNode } from '../operation-node/json-path-node.js'; + import { JSONPathLegNode } from '../operation-node/json-path-leg-node.js'; + import { JSONOperatorChainNode } from '../operation-node/json-operator-chain-node.js'; + import { TupleNode } from '../operation-node/tuple-node.js'; ++import { AddIndexNode } from '../operation-node/add-index-node.js'; ++import { CreateTriggerNode } from '../operation-node/create-trigger-node.js'; ++import { DropTriggerNode } from '../operation-node/drop-trigger-node.js'; ++import { TriggerEventNode } from '../operation-node/trigger-event-node.js'; ++import { TriggerOrderNode } from '../operation-node/trigger-order-node.js'; + export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler { + #private; + protected get numParameters(): number; +@@ -124,6 +129,10 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement + protected visitTable(node: TableNode): void; + protected visitSchemableIdentifier(node: SchemableIdentifierNode): void; + protected visitCreateTable(node: CreateTableNode): void; ++ protected visitCreateTrigger(node: CreateTriggerNode): void; ++ protected visitTriggerEvent(node: TriggerEventNode): void; ++ protected visitTriggerOrder(node: TriggerOrderNode): void; ++ protected visitDropTrigger(node: DropTriggerNode): void; + protected visitColumnDefinition(node: ColumnDefinitionNode): void; + protected getAutoIncrement(): string; + protected visitReferences(node: ReferencesNode): void; +@@ -184,6 +193,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement + protected visitJSONPath(node: JSONPathNode): void; + protected visitJSONPathLeg(node: JSONPathLegNode): void; + protected visitJSONOperatorChain(node: JSONOperatorChainNode): void; ++ protected visitAddIndex(node: AddIndexNode): void; + protected append(str: string): void; + protected appendValue(parameter: unknown): void; + protected getLeftIdentifierWrapper(): string; +@@ -197,4 +207,10 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement + protected addParameter(parameter: unknown): void; + protected appendImmediateValue(value: unknown): void; + protected sortSelectModifiers(arr: SelectModifierNode[]): ReadonlyArray; ++ protected compileColumnAlterations(columnAlterations: readonly AlterTableColumnAlterationNode[]): void; ++ /** ++ * controls whether the dialect adds a "type" keyword before a column's new data ++ * type in an ALTER TABLE statement. ++ */ ++ protected announcesNewColumnDataType(): boolean; + } +diff --git a/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.js b/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.js +index c75a92d..0762ebd 100644 +--- a/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.js ++++ b/node_modules/kysely/dist/esm/query-compiler/default-query-compiler.js +@@ -1,4 +1,5 @@ + /// ++import { CreateTableNode } from '../operation-node/create-table-node.js'; + import { InsertQueryNode } from '../operation-node/insert-query-node.js'; + import { OperationNodeVisitor } from '../operation-node/operation-node-visitor.js'; + import { OperatorNode } from '../operation-node/operator-node.js'; +@@ -30,6 +31,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + const wrapInParens = this.parentNode !== undefined && + !ParensNode.is(this.parentNode) && + !InsertQueryNode.is(this.parentNode) && ++ !CreateTableNode.is(this.parentNode) && + !CreateViewNode.is(this.parentNode) && + !SetOperationNode.is(this.parentNode); + if (this.parentNode === undefined && node.explain) { +@@ -346,17 +348,83 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + this.append('if not exists '); + } + this.visitNode(node.table); +- this.append(' ('); +- this.compileList([...node.columns, ...(node.constraints ?? [])]); +- this.append(')'); +- if (node.onCommit) { +- this.append(' on commit '); +- this.append(node.onCommit); ++ if (node.selectQuery) { ++ this.append(' as '); ++ this.visitNode(node.selectQuery); + } +- if (node.endModifiers && node.endModifiers.length > 0) { +- this.append(' '); +- this.compileList(node.endModifiers, ' '); ++ else { ++ this.append(' ('); ++ this.compileList([...node.columns, ...(node.constraints ?? [])]); ++ this.append(')'); ++ if (node.onCommit) { ++ this.append(' on commit '); ++ this.append(node.onCommit); ++ } ++ if (node.endModifiers && node.endModifiers.length > 0) { ++ this.append(' '); ++ this.compileList(node.endModifiers, ' '); ++ } ++ } ++ } ++ visitCreateTrigger(node) { ++ if (!node.time) ++ throw new Error('Trigger time is required.'); ++ if (!node.events) ++ throw new Error('Trigger event is required.'); ++ if (!node.table) ++ throw new Error('Trigger table is required.'); ++ this.append('create '); ++ if (node.temporary) { ++ this.append('temporary '); + } ++ if (node.orReplace) { ++ this.append('or replace '); ++ } ++ this.append('trigger '); ++ if (node.ifNotExists) { ++ this.append('if not exists '); ++ } ++ this.visitNode(node.name); ++ this.append(` ${node.time} `); ++ this.compileList(node.events, ' or '); ++ this.append(' on '); ++ this.visitNode(node.table); ++ if (node.forEach) ++ this.append(` for each ${node.forEach} `); ++ if (node.when) { ++ this.append(' when '); ++ this.visitNode(node.when); ++ } ++ if (node.order) ++ this.visitNode(node.order); ++ if (node.queries) { ++ this.append(' begin '); ++ this.compileList(node.queries, '; '); ++ this.append('; '); ++ this.append('end'); ++ } ++ else if (node.function) { ++ this.append(' execute function '); ++ this.visitNode(node.function); ++ } ++ } ++ visitTriggerEvent(node) { ++ this.append(`${node.event} `); ++ if (node.event === 'update' && node.columns) { ++ this.append('of '); ++ this.compileList(node.columns, ', '); ++ } ++ } ++ visitTriggerOrder(node) { ++ this.append(`${node.order} `); ++ this.visitNode(node.otherTriggerName); ++ } ++ visitDropTrigger(node) { ++ this.append('drop trigger '); ++ if (node.ifExists) { ++ this.append('if exists '); ++ } ++ this.visitNode(node.name); + } + visitColumnDefinition(node) { + this.visitNode(node.column); +@@ -383,6 +451,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + if (node.unique) { + this.append(' unique'); + } ++ if (node.nullsNotDistinct) { ++ this.append(' nulls not distinct'); ++ } + if (node.primaryKey) { + this.append(' primary key'); + } +@@ -563,6 +634,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + this.compileList(node.columns); + this.append(')'); + } ++ if (node.nullsNotDistinct) { ++ this.append(' nulls not distinct'); ++ } + if (node.where) { + this.append(' '); + this.visitNode(node.where); +@@ -615,7 +689,11 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + this.visitNode(node.name); + this.append(' '); + } +- this.append('unique ('); ++ this.append('unique'); ++ if (node.nullsNotDistinct) { ++ this.append(' nulls not distinct'); ++ } ++ this.append(' ('); + this.compileList(node.columns); + this.append(')'); + } +@@ -696,7 +774,13 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + this.visitNode(node.dropConstraint); + } + if (node.columnAlterations) { +- this.compileList(node.columnAlterations); ++ this.compileColumnAlterations(node.columnAlterations); ++ } ++ if (node.addIndex) { ++ this.visitNode(node.addIndex); ++ } ++ if (node.dropIndex) { ++ this.visitNode(node.dropIndex); + } + } + visitAddColumn(node) { +@@ -718,7 +802,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + this.visitNode(node.column); + this.append(' '); + if (node.dataType) { +- this.append('type '); ++ if (this.announcesNewColumnDataType()) { ++ this.append('type '); ++ } + this.visitNode(node.dataType); + if (node.dataTypeExpression) { + this.append('using '); +@@ -1004,6 +1090,23 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + this.visitNode(node.values[i]); + } + } ++ visitAddIndex(node) { ++ this.append('add '); ++ if (node.unique) { ++ this.append('unique '); ++ } ++ this.append('index '); ++ this.visitNode(node.name); ++ if (node.columns) { ++ this.append(' ('); ++ this.compileList(node.columns); ++ this.append(')'); ++ } ++ if (node.using) { ++ this.append(' using '); ++ this.visitNode(node.using); ++ } ++ } + append(str) { + this.#sql += str; + } +@@ -1077,6 +1180,16 @@ export class DefaultQueryCompiler extends OperationNodeVisitor { + : 1); + return freeze(arr); + } ++ compileColumnAlterations(columnAlterations) { ++ this.compileList(columnAlterations); ++ } ++ /** ++ * controls whether the dialect adds a "type" keyword before a column's new data ++ * type in an ALTER TABLE statement. ++ */ ++ announcesNewColumnDataType() { ++ return true; ++ } + } + const SELECT_MODIFIER_SQL = freeze({ + ForKeyShare: 'for key share', +diff --git a/node_modules/kysely/dist/esm/query-compiler/query-compiler.d.ts b/node_modules/kysely/dist/esm/query-compiler/query-compiler.d.ts +index e3a8555..e96bd90 100644 +--- a/node_modules/kysely/dist/esm/query-compiler/query-compiler.d.ts ++++ b/node_modules/kysely/dist/esm/query-compiler/query-compiler.d.ts +@@ -2,17 +2,19 @@ import { AlterTableNode } from '../operation-node/alter-table-node.js'; + import { CreateIndexNode } from '../operation-node/create-index-node.js'; + import { CreateSchemaNode } from '../operation-node/create-schema-node.js'; + import { CreateTableNode } from '../operation-node/create-table-node.js'; ++import { CreateTriggerNode } from '../operation-node/create-trigger-node.js'; + import { CreateTypeNode } from '../operation-node/create-type-node.js'; + import { CreateViewNode } from '../operation-node/create-view-node.js'; + import { DropIndexNode } from '../operation-node/drop-index-node.js'; + import { DropSchemaNode } from '../operation-node/drop-schema-node.js'; + import { DropTableNode } from '../operation-node/drop-table-node.js'; ++import { DropTriggerNode } from '../operation-node/drop-trigger-node.js'; + import { DropTypeNode } from '../operation-node/drop-type-node.js'; + import { DropViewNode } from '../operation-node/drop-view-node.js'; + import { QueryNode } from '../operation-node/query-node.js'; + import { RawNode } from '../operation-node/raw-node.js'; + import { CompiledQuery } from './compiled-query.js'; +-export type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode | CreateTypeNode | DropTypeNode; ++export type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode | CreateTypeNode | DropTypeNode | CreateTriggerNode | DropTriggerNode; + /** + * a `QueryCompiler` compiles a query expressed as a tree of `OperationNodes` into SQL. + */ +diff --git a/node_modules/kysely/dist/esm/schema/alter-table-add-index-builder.d.ts b/node_modules/kysely/dist/esm/schema/alter-table-add-index-builder.d.ts +new file mode 100644 +index 0000000..b297698 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/schema/alter-table-add-index-builder.d.ts +@@ -0,0 +1,104 @@ ++import { Expression } from '../expression/expression.js'; ++import { AlterTableNode } from '../operation-node/alter-table-node.js'; ++import { IndexType } from '../operation-node/create-index-node.js'; ++import { OperationNodeSource } from '../operation-node/operation-node-source.js'; ++import { OrderedColumnName } from '../parser/reference-parser.js'; ++import { CompiledQuery } from '../query-compiler/compiled-query.js'; ++import { QueryExecutor } from '../query-executor/query-executor.js'; ++import { Compilable } from '../util/compilable.js'; ++import { QueryId } from '../util/query-id.js'; ++export declare class AlterTableAddIndexBuilder implements OperationNodeSource, Compilable { ++ #private; ++ constructor(props: AlterTableAddIndexBuilderProps); ++ /** ++ * Makes the index unique. ++ */ ++ unique(): AlterTableAddIndexBuilder; ++ /** ++ * Adds a column to the index. ++ * ++ * Also see {@link columns} for adding multiple columns at once or {@link expression} ++ * for specifying an arbitrary expression. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * await db.schema ++ * .alterTable('person') ++ * .createIndex('person_first_name_and_age_index') ++ * .column('first_name') ++ * .column('age desc') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc) ++ * ``` ++ */ ++ column(column: OrderedColumnName): AlterTableAddIndexBuilder; ++ /** ++ * Specifies a list of columns for the index. ++ * ++ * Also see {@link column} for adding a single column or {@link expression} for ++ * specifying an arbitrary expression. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * await db.schema ++ * .alterTable('person') ++ * .addIndex('person_first_name_and_age_index') ++ * .columns(['first_name', 'age desc']) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc) ++ * ``` ++ */ ++ columns(columns: OrderedColumnName[]): AlterTableAddIndexBuilder; ++ /** ++ * Specifies an arbitrary expression for the index. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * import { sql } from 'kysely' ++ * ++ * await db.schema ++ * .alterTable('person') ++ * .addIndex('person_first_name_index') ++ * .expression(sql`(first_name < 'Sami')`) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_index` ((first_name < 'Sami')) ++ * ``` ++ */ ++ expression(expression: Expression): AlterTableAddIndexBuilder; ++ /** ++ * Specifies the index type. ++ */ ++ using(indexType: IndexType): AlterTableAddIndexBuilder; ++ using(indexType: string): AlterTableAddIndexBuilder; ++ /** ++ * Simply calls the provided function passing `this` as the only argument. `$call` returns ++ * what the provided function returns. ++ */ ++ $call(func: (qb: this) => T): T; ++ toOperationNode(): AlterTableNode; ++ compile(): CompiledQuery; ++ execute(): Promise; ++} ++export interface AlterTableAddIndexBuilderProps { ++ readonly queryId: QueryId; ++ readonly executor: QueryExecutor; ++ readonly node: AlterTableNode; ++} +diff --git a/node_modules/kysely/dist/esm/schema/alter-table-add-index-builder.js b/node_modules/kysely/dist/esm/schema/alter-table-add-index-builder.js +new file mode 100644 +index 0000000..00a8ef4 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/schema/alter-table-add-index-builder.js +@@ -0,0 +1,143 @@ ++/// ++import { AddIndexNode } from '../operation-node/add-index-node.js'; ++import { AlterTableNode } from '../operation-node/alter-table-node.js'; ++import { RawNode } from '../operation-node/raw-node.js'; ++import { parseOrderedColumnName } from '../parser/reference-parser.js'; ++import { freeze } from '../util/object-utils.js'; ++import { preventAwait } from '../util/prevent-await.js'; ++export class AlterTableAddIndexBuilder { ++ #props; ++ constructor(props) { ++ this.#props = freeze(props); ++ } ++ /** ++ * Makes the index unique. ++ */ ++ unique() { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: AddIndexNode.cloneWith(this.#props.node.addIndex, { ++ unique: true, ++ }), ++ }), ++ }); ++ } ++ /** ++ * Adds a column to the index. ++ * ++ * Also see {@link columns} for adding multiple columns at once or {@link expression} ++ * for specifying an arbitrary expression. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * await db.schema ++ * .alterTable('person') ++ * .createIndex('person_first_name_and_age_index') ++ * .column('first_name') ++ * .column('age desc') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc) ++ * ``` ++ */ ++ column(column) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [parseOrderedColumnName(column)]), ++ }), ++ }); ++ } ++ /** ++ * Specifies a list of columns for the index. ++ * ++ * Also see {@link column} for adding a single column or {@link expression} for ++ * specifying an arbitrary expression. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * await db.schema ++ * .alterTable('person') ++ * .addIndex('person_first_name_and_age_index') ++ * .columns(['first_name', 'age desc']) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc) ++ * ``` ++ */ ++ columns(columns) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: AddIndexNode.cloneWithColumns(this.#props.node.addIndex, columns.map(parseOrderedColumnName)), ++ }), ++ }); ++ } ++ /** ++ * Specifies an arbitrary expression for the index. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * import { sql } from 'kysely' ++ * ++ * await db.schema ++ * .alterTable('person') ++ * .addIndex('person_first_name_index') ++ * .expression(sql`(first_name < 'Sami')`) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add index `person_first_name_index` ((first_name < 'Sami')) ++ * ``` ++ */ ++ expression(expression) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [expression.toOperationNode()]), ++ }), ++ }); ++ } ++ using(indexType) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: AddIndexNode.cloneWith(this.#props.node.addIndex, { ++ using: RawNode.createWithSql(indexType), ++ }), ++ }), ++ }); ++ } ++ /** ++ * Simply calls the provided function passing `this` as the only argument. `$call` returns ++ * what the provided function returns. ++ */ ++ $call(func) { ++ return func(this); ++ } ++ toOperationNode() { ++ return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId); ++ } ++ compile() { ++ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId); ++ } ++ async execute() { ++ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId); ++ } ++} ++preventAwait(AlterTableAddIndexBuilder, "don't await AlterTableAddIndexBuilder instances directly. To execute the query you need to call `execute`"); +diff --git a/node_modules/kysely/dist/esm/schema/alter-table-builder.d.ts b/node_modules/kysely/dist/esm/schema/alter-table-builder.d.ts +index b0726ca..4453c5b 100644 +--- a/node_modules/kysely/dist/esm/schema/alter-table-builder.d.ts ++++ b/node_modules/kysely/dist/esm/schema/alter-table-builder.d.ts +@@ -11,6 +11,8 @@ import { AlterColumnBuilderCallback } from './alter-column-builder.js'; + import { AlterTableExecutor } from './alter-table-executor.js'; + import { AlterTableAddForeignKeyConstraintBuilder } from './alter-table-add-foreign-key-constraint-builder.js'; + import { AlterTableDropConstraintBuilder } from './alter-table-drop-constraint-builder.js'; ++import { AlterTableAddIndexBuilder } from './alter-table-add-index-builder.js'; ++import { UniqueConstraintNodeBuilderCallback } from './unique-constraint-builder.js'; + /** + * This builder can be used to create a `alter table` query. + */ +@@ -35,7 +37,7 @@ export declare class AlterTableBuilder implements ColumnAlteringInterface { + /** + * See {@link CreateTableBuilder.addUniqueConstraint} + */ +- addUniqueConstraint(constraintName: string, columns: string[]): AlterTableExecutor; ++ addUniqueConstraint(constraintName: string, columns: string[], build?: UniqueConstraintNodeBuilderCallback): AlterTableExecutor; + /** + * See {@link CreateTableBuilder.addCheckConstraint} + */ +@@ -53,6 +55,44 @@ export declare class AlterTableBuilder implements ColumnAlteringInterface { + */ + addPrimaryKeyConstraint(constraintName: string, columns: string[]): AlterTableExecutor; + dropConstraint(constraintName: string): AlterTableDropConstraintBuilder; ++ /** ++ * This can be used to add index to table. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.alterTable('person') ++ * .addIndex('person_email_index') ++ * .column('email') ++ * .unique() ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add unique index `person_email_index` (`email`) ++ * ``` ++ */ ++ addIndex(indexName: string): AlterTableAddIndexBuilder; ++ /** ++ * This can be used to drop index from table. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.alterTable('person') ++ * .dropIndex('person_email_index') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` drop index `test_first_name_index` ++ * ``` ++ */ ++ dropIndex(indexName: string): AlterTableExecutor; + /** + * Calls the given function passing `this` as the only argument. + * +diff --git a/node_modules/kysely/dist/esm/schema/alter-table-builder.js b/node_modules/kysely/dist/esm/schema/alter-table-builder.js +index f003eb8..2d8dac8 100644 +--- a/node_modules/kysely/dist/esm/schema/alter-table-builder.js ++++ b/node_modules/kysely/dist/esm/schema/alter-table-builder.js +@@ -23,6 +23,10 @@ import { AlterTableExecutor } from './alter-table-executor.js'; + import { AlterTableAddForeignKeyConstraintBuilder } from './alter-table-add-foreign-key-constraint-builder.js'; + import { AlterTableDropConstraintBuilder } from './alter-table-drop-constraint-builder.js'; + import { PrimaryConstraintNode } from '../operation-node/primary-constraint-node.js'; ++import { DropIndexNode } from '../operation-node/drop-index-node.js'; ++import { AddIndexNode } from '../operation-node/add-index-node.js'; ++import { AlterTableAddIndexBuilder } from './alter-table-add-index-builder.js'; ++import { UniqueConstraintNodeBuilder, } from './unique-constraint-builder.js'; + /** + * This builder can be used to create a `alter table` query. + */ +@@ -83,11 +87,12 @@ export class AlterTableBuilder { + /** + * See {@link CreateTableBuilder.addUniqueConstraint} + */ +- addUniqueConstraint(constraintName, columns) { ++ addUniqueConstraint(constraintName, columns, build = noop) { ++ const uniqueConstraintBuilder = build(new UniqueConstraintNodeBuilder(UniqueConstraintNode.create(columns, constraintName))); + return new AlterTableExecutor({ + ...this.#props, + node: AlterTableNode.cloneWithTableProps(this.#props.node, { +- addConstraint: AddConstraintNode.create(UniqueConstraintNode.create(columns, constraintName)), ++ addConstraint: AddConstraintNode.create(uniqueConstraintBuilder.toOperationNode()), + }), + }); + } +@@ -134,6 +139,58 @@ export class AlterTableBuilder { + }), + }); + } ++ /** ++ * This can be used to add index to table. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.alterTable('person') ++ * .addIndex('person_email_index') ++ * .column('email') ++ * .unique() ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` add unique index `person_email_index` (`email`) ++ * ``` ++ */ ++ addIndex(indexName) { ++ return new AlterTableAddIndexBuilder({ ++ ...this.#props, ++ node: AlterTableNode.cloneWithTableProps(this.#props.node, { ++ addIndex: AddIndexNode.create(indexName), ++ }), ++ }); ++ } ++ /** ++ * This can be used to drop index from table. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.alterTable('person') ++ * .dropIndex('person_email_index') ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (MySQL): ++ * ++ * ```sql ++ * alter table `person` drop index `test_first_name_index` ++ * ``` ++ */ ++ dropIndex(indexName) { ++ return new AlterTableExecutor({ ++ ...this.#props, ++ node: AlterTableNode.cloneWithTableProps(this.#props.node, { ++ dropIndex: DropIndexNode.create(indexName), ++ }), ++ }); ++ } + /** + * Calls the given function passing `this` as the only argument. + * +diff --git a/node_modules/kysely/dist/esm/schema/column-definition-builder.d.ts b/node_modules/kysely/dist/esm/schema/column-definition-builder.d.ts +index 2a99c4c..a76104c 100644 +--- a/node_modules/kysely/dist/esm/schema/column-definition-builder.d.ts ++++ b/node_modules/kysely/dist/esm/schema/column-definition-builder.d.ts +@@ -183,6 +183,31 @@ export declare class ColumnDefinitionBuilder implements OperationNodeSource { + * ``` + */ + modifyFront(modifier: Expression): ColumnDefinitionBuilder; ++ /** ++ * Adds `nulls not distinct` specifier. ++ * Should be used with `unique` constraint. ++ * ++ * This only works on some dialects like PostgreSQL. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createTable('person') ++ * .addColumn('id', 'integer', col => col.primaryKey()) ++ * .addColumn('first_name', 'varchar(30)', col => col.unique().nullsNotDistinct()) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create table "person" ( ++ * "id" integer primary key, ++ * "first_name" varchar(30) unique nulls not distinct ++ * ) ++ * ``` ++ */ ++ nullsNotDistinct(): ColumnDefinitionBuilder; + /** + * This can be used to add any additional SQL to the end of the column definition. + * +diff --git a/node_modules/kysely/dist/esm/schema/column-definition-builder.js b/node_modules/kysely/dist/esm/schema/column-definition-builder.js +index 8ff9bf2..7111109 100644 +--- a/node_modules/kysely/dist/esm/schema/column-definition-builder.js ++++ b/node_modules/kysely/dist/esm/schema/column-definition-builder.js +@@ -256,6 +256,33 @@ export class ColumnDefinitionBuilder { + modifyFront(modifier) { + return new ColumnDefinitionBuilder(ColumnDefinitionNode.cloneWithFrontModifier(this.#node, modifier.toOperationNode())); + } ++ /** ++ * Adds `nulls not distinct` specifier. ++ * Should be used with `unique` constraint. ++ * ++ * This only works on some dialects like PostgreSQL. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createTable('person') ++ * .addColumn('id', 'integer', col => col.primaryKey()) ++ * .addColumn('first_name', 'varchar(30)', col => col.unique().nullsNotDistinct()) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create table "person" ( ++ * "id" integer primary key, ++ * "first_name" varchar(30) unique nulls not distinct ++ * ) ++ * ``` ++ */ ++ nullsNotDistinct() { ++ return new ColumnDefinitionBuilder(ColumnDefinitionNode.cloneWith(this.#node, { nullsNotDistinct: true })); ++ } + /** + * This can be used to add any additional SQL to the end of the column definition. + * +diff --git a/node_modules/kysely/dist/esm/schema/create-index-builder.d.ts b/node_modules/kysely/dist/esm/schema/create-index-builder.d.ts +index 27502c4..b44e116 100644 +--- a/node_modules/kysely/dist/esm/schema/create-index-builder.d.ts ++++ b/node_modules/kysely/dist/esm/schema/create-index-builder.d.ts +@@ -22,6 +22,29 @@ export declare class CreateIndexBuilder implements OperationNodeSourc + * Makes the index unique. + */ + unique(): CreateIndexBuilder; ++ /** ++ * Adds `nulls not distinct` specifier to index. ++ * This only works on some dialects like PostgreSQL. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createIndex('person_first_name_index') ++ * .on('person') ++ * .column('first_name') ++ * .nullsNotDistinct() ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create index "person_first_name_index" ++ * on "test" ("first_name") ++ * nulls not distinct; ++ * ``` ++ */ ++ nullsNotDistinct(): CreateIndexBuilder; + /** + * Specifies the table for the index. + */ +diff --git a/node_modules/kysely/dist/esm/schema/create-index-builder.js b/node_modules/kysely/dist/esm/schema/create-index-builder.js +index 7886ba1..5d40347 100644 +--- a/node_modules/kysely/dist/esm/schema/create-index-builder.js ++++ b/node_modules/kysely/dist/esm/schema/create-index-builder.js +@@ -37,6 +37,36 @@ export class CreateIndexBuilder { + }), + }); + } ++ /** ++ * Adds `nulls not distinct` specifier to index. ++ * This only works on some dialects like PostgreSQL. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createIndex('person_first_name_index') ++ * .on('person') ++ * .column('first_name') ++ * .nullsNotDistinct() ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create index "person_first_name_index" ++ * on "test" ("first_name") ++ * nulls not distinct; ++ * ``` ++ */ ++ nullsNotDistinct() { ++ return new CreateIndexBuilder({ ++ ...this.#props, ++ node: CreateIndexNode.cloneWith(this.#props.node, { ++ nullsNotDistinct: true, ++ }), ++ }); ++ } + /** + * Specifies the table for the index. + */ +diff --git a/node_modules/kysely/dist/esm/schema/create-table-builder.d.ts b/node_modules/kysely/dist/esm/schema/create-table-builder.d.ts +index e160575..3b7e7ce 100644 +--- a/node_modules/kysely/dist/esm/schema/create-table-builder.d.ts ++++ b/node_modules/kysely/dist/esm/schema/create-table-builder.d.ts +@@ -8,6 +8,7 @@ import { QueryId } from '../util/query-id.js'; + import { ForeignKeyConstraintBuilder } from './foreign-key-constraint-builder.js'; + import { DataTypeExpression } from '../parser/data-type-parser.js'; + import { Expression } from '../expression/expression.js'; ++import { UniqueConstraintNodeBuilderCallback } from './unique-constraint-builder.js'; + /** + * This builder can be used to create a `create table` query. + */ +@@ -56,7 +57,7 @@ export declare class CreateTableBuilder builder.nullsNotDistinct()) ++ * ``` + */ +- addUniqueConstraint(constraintName: string, columns: C[]): CreateTableBuilder; ++ addUniqueConstraint(constraintName: string, columns: C[], build?: UniqueConstraintNodeBuilderCallback): CreateTableBuilder; + /** + * Adds a check constraint. + * +@@ -205,6 +211,26 @@ export declare class CreateTableBuilder): CreateTableBuilder; ++ /** ++ * Allows to create table from `select` query. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createTable('copy') ++ * .temporary() ++ * .as(db.selectFrom('person').select(['first_name', 'last_name'])) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create temporary table "copy" as ++ * select "first_name", "last_name" from "person" ++ * ``` ++ */ ++ as(expression: Expression): CreateTableBuilder; + /** + * Calls the given function passing `this` as the only argument. + * +diff --git a/node_modules/kysely/dist/esm/schema/create-table-builder.js b/node_modules/kysely/dist/esm/schema/create-table-builder.js +index 20fb8c5..f3423e2 100644 +--- a/node_modules/kysely/dist/esm/schema/create-table-builder.js ++++ b/node_modules/kysely/dist/esm/schema/create-table-builder.js +@@ -13,6 +13,8 @@ import { UniqueConstraintNode } from '../operation-node/unique-constraint-node.j + import { CheckConstraintNode } from '../operation-node/check-constraint-node.js'; + import { parseTable } from '../parser/table-parser.js'; + import { parseOnCommitAction } from '../parser/on-commit-action-parse.js'; ++import { UniqueConstraintNodeBuilder, } from './unique-constraint-builder.js'; ++import { parseExpression } from '../parser/expression-parser.js'; + /** + * This builder can be used to create a `create table` query. + */ +@@ -84,7 +86,7 @@ export class CreateTableBuilder { + * ``` + * + * With this method, it's once again good to remember that Kysely just builds the +- * query and doesn't provide the same API for all databses. For example, some ++ * query and doesn't provide the same API for all databases. For example, some + * databases like older MySQL don't support the `references` statement in the + * column definition. Instead foreign key constraints need to be defined in the + * `create table` query. See the next example: +@@ -143,11 +145,17 @@ export class CreateTableBuilder { + * ```ts + * addUniqueConstraint('first_name_last_name_unique', ['first_name', 'last_name']) + * ``` ++ * ++ * In dialects such as PostgreSQL you can specify `nulls not distinct` as follows: ++ * ```ts ++ * addUniqueConstraint('first_name_last_name_unique', ['first_name', 'last_name'], (builder) => builder.nullsNotDistinct()) ++ * ``` + */ +- addUniqueConstraint(constraintName, columns) { ++ addUniqueConstraint(constraintName, columns, build = noop) { ++ const uniqueConstraintBuilder = build(new UniqueConstraintNodeBuilder(UniqueConstraintNode.create(columns, constraintName))); + return new CreateTableBuilder({ + ...this.#props, +- node: CreateTableNode.cloneWithConstraint(this.#props.node, UniqueConstraintNode.create(columns, constraintName)), ++ node: CreateTableNode.cloneWithConstraint(this.#props.node, uniqueConstraintBuilder.toOperationNode()), + }); + } + /** +@@ -270,6 +278,33 @@ export class CreateTableBuilder { + node: CreateTableNode.cloneWithEndModifier(this.#props.node, modifier.toOperationNode()), + }); + } ++ /** ++ * Allows to create table from `select` query. ++ * ++ * ### Examples ++ * ++ * ```ts ++ * db.schema.createTable('copy') ++ * .temporary() ++ * .as(db.selectFrom('person').select(['first_name', 'last_name'])) ++ * .execute() ++ * ``` ++ * ++ * The generated SQL (PostgreSQL): ++ * ++ * ```sql ++ * create temporary table "copy" as ++ * select "first_name", "last_name" from "person" ++ * ``` ++ */ ++ as(expression) { ++ return new CreateTableBuilder({ ++ ...this.#props, ++ node: CreateTableNode.cloneWith(this.#props.node, { ++ selectQuery: parseExpression(expression), ++ }), ++ }); ++ } + /** + * Calls the given function passing `this` as the only argument. + * +diff --git a/node_modules/kysely/dist/esm/schema/create-trigger-builder.d.ts b/node_modules/kysely/dist/esm/schema/create-trigger-builder.d.ts +new file mode 100644 +index 0000000..c65746a +--- /dev/null ++++ b/node_modules/kysely/dist/esm/schema/create-trigger-builder.d.ts +@@ -0,0 +1,68 @@ ++import { CreateTriggerNode } from '../operation-node/create-trigger-node.js'; ++import { OperationNodeSource } from '../operation-node/operation-node-source.js'; ++import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js'; ++import { ReferenceExpression } from '../parser/reference-parser.js'; ++import { CompiledQuery } from '../query-compiler/compiled-query.js'; ++import { QueryExecutor } from '../query-executor/query-executor.js'; ++import { Compilable } from '../util/compilable.js'; ++import { QueryId } from '../util/query-id.js'; ++import { AnyColumn, AnyColumnWithTable, SqlBool } from '../util/type-utils.js'; ++import { TriggerEvent } from '../operation-node/trigger-event-node.js'; ++import { ExpressionOrFactory } from '../parser/expression-parser.js'; ++import { TriggerQueryCreator } from '../trigger-query-creator.js'; ++export type DatabaseWithOldNewTables = DB & { ++ old: DB[TB]; ++ new: DB[TB]; ++}; ++/** ++ * This builder can be used to create a `create table` query. ++ */ ++export declare class CreateTriggerBuilder implements OperationNodeSource, Compilable { ++ #private; ++ constructor(props: CreateTriggerBuilderProps); ++ before(): CreateTriggerBuilder; ++ after(): CreateTriggerBuilder; ++ insteadOf(): CreateTriggerBuilder; ++ addEvent(event: E, columns?: E extends 'update' ? AnyColumn[] : never[]): CreateTriggerBuilder; ++ forEachRow(): CreateTriggerBuilder; ++ forEachStatement(): CreateTriggerBuilder; ++ follows(otherTriggerName: string): CreateTriggerBuilder; ++ precedes(otherTriggerName: string): CreateTriggerBuilder; ++ /** ++ * Specifies the table for the trigger. ++ */ ++ onTable(table: TE, schema?: string): CreateTriggerBuilder; ++ /** ++ * Adds the "temporary" modifier. ++ * ++ * Use this to create a temporary trigger. ++ */ ++ temporary(): CreateTriggerBuilder; ++ /** ++ * Adds the "if not exists" modifier. ++ * ++ * If the trigger already exists, no error is thrown if this method has been called. ++ */ ++ ifNotExists(): CreateTriggerBuilder; ++ /** ++ * Only supported on PostgreSQL ++ */ ++ orReplace(): CreateTriggerBuilder; ++ /** ++ * Adds a query to the trigger. ++ */ ++ addQuery(build: QueryCreatorCallback): CreateTriggerBuilder; ++ function(name: string, args: ReadonlyArray>): CreateTriggerBuilder; ++ when, 'old' | 'new'>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList): CreateTriggerBuilder; ++ when(factory: ExpressionOrFactory, 'old' | 'new', SqlBool>): CreateTriggerBuilder; ++ $call(func: (qb: this) => T): T; ++ toOperationNode(): CreateTriggerNode; ++ compile(): CompiledQuery; ++ execute(): Promise; ++} ++export interface CreateTriggerBuilderProps { ++ readonly queryId: QueryId; ++ readonly executor: QueryExecutor; ++ readonly node: CreateTriggerNode; ++} ++export type QueryCreatorCallback = (creator: TriggerQueryCreator) => OperationNodeSource; +diff --git a/node_modules/kysely/dist/esm/schema/create-trigger-builder.js b/node_modules/kysely/dist/esm/schema/create-trigger-builder.js +new file mode 100644 +index 0000000..d3eb721 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/schema/create-trigger-builder.js +@@ -0,0 +1,177 @@ ++/// ++import { CreateTriggerNode } from '../operation-node/create-trigger-node.js'; ++import { QueryNode } from '../operation-node/query-node.js'; ++import { parseValueBinaryOperationOrExpression, } from '../parser/binary-operation-parser.js'; ++import { parseOrderedColumnName, parseReferenceExpressionOrList, } from '../parser/reference-parser.js'; ++import { ImmediateValueTransformer } from '../plugin/immediate-value/immediate-value-transformer.js'; ++import { freeze } from '../util/object-utils.js'; ++import { preventAwait } from '../util/prevent-await.js'; ++import { IdentifierNode } from '../operation-node/identifier-node.js'; ++import { TriggerOrderNode } from '../operation-node/trigger-order-node.js'; ++import { TriggerEventNode, } from '../operation-node/trigger-event-node.js'; ++import { FunctionNode } from '../operation-node/function-node.js'; ++import { TriggerQueryCreator } from '../trigger-query-creator.js'; ++import { TableNode } from '../operation-node/table-node.js'; ++/** ++ * This builder can be used to create a `create table` query. ++ */ ++export class CreateTriggerBuilder { ++ #props; ++ constructor(props) { ++ this.#props = freeze(props); ++ } ++ before() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ time: 'before', ++ }), ++ }); ++ } ++ after() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ time: 'after', ++ }), ++ }); ++ } ++ insteadOf() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ time: 'instead of', ++ }), ++ }); ++ } ++ addEvent(event, columns) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWithEvent(this.#props.node, TriggerEventNode.create(event, columns?.map(parseOrderedColumnName))), ++ }); ++ } ++ forEachRow() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ forEach: `row`, ++ }), ++ }); ++ } ++ forEachStatement() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ forEach: `statement`, ++ }), ++ }); ++ } ++ follows(otherTriggerName) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ order: TriggerOrderNode.create('follows', IdentifierNode.create(otherTriggerName)), ++ }), ++ }); ++ } ++ precedes(otherTriggerName) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ order: TriggerOrderNode.create('precedes', IdentifierNode.create(otherTriggerName)), ++ }), ++ }); ++ } ++ /** ++ * Specifies the table for the trigger. ++ */ ++ onTable(table, schema) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ table: schema ++ ? TableNode.createWithSchema(schema, table) ++ : TableNode.create(table), ++ }), ++ }); ++ } ++ /** ++ * Adds the "temporary" modifier. ++ * ++ * Use this to create a temporary trigger. ++ */ ++ temporary() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ temporary: true, ++ }), ++ }); ++ } ++ /** ++ * Adds the "if not exists" modifier. ++ * ++ * If the trigger already exists, no error is thrown if this method has been called. ++ */ ++ ifNotExists() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ ifNotExists: true, ++ }), ++ }); ++ } ++ /** ++ * Only supported on PostgreSQL ++ */ ++ orReplace() { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ orReplace: true, ++ }), ++ }); ++ } ++ /** ++ * Adds a query to the trigger. ++ */ ++ addQuery(build) { ++ const node = build(new TriggerQueryCreator({ executor: this.#props.executor })).toOperationNode(); ++ if (!QueryNode.is(node)) ++ throw new Error('Must be a query node.'); ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWithQuery(this.#props.node, node), ++ }); ++ } ++ function(name, args) { ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ function: FunctionNode.create(name, parseReferenceExpressionOrList(args)), ++ }), ++ }); ++ } ++ when(...args) { ++ const transformer = new ImmediateValueTransformer(); ++ return new CreateTriggerBuilder({ ++ ...this.#props, ++ node: CreateTriggerNode.cloneWith(this.#props.node, { ++ when: transformer.transformNode(parseValueBinaryOperationOrExpression(args)), ++ }), ++ }); ++ } ++ $call(func) { ++ return func(this); ++ } ++ toOperationNode() { ++ return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId); ++ } ++ compile() { ++ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId); ++ } ++ async execute() { ++ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId); ++ } ++} ++preventAwait(CreateTriggerBuilder, "don't await CreateTriggerBuilder instances directly. To execute the query you need to call `execute`"); +diff --git a/node_modules/kysely/dist/esm/schema/drop-trigger-builder.d.ts b/node_modules/kysely/dist/esm/schema/drop-trigger-builder.d.ts +new file mode 100644 +index 0000000..b0e3fce +--- /dev/null ++++ b/node_modules/kysely/dist/esm/schema/drop-trigger-builder.d.ts +@@ -0,0 +1,25 @@ ++import { OperationNodeSource } from '../operation-node/operation-node-source.js'; ++import { CompiledQuery } from '../query-compiler/compiled-query.js'; ++import { Compilable } from '../util/compilable.js'; ++import { QueryExecutor } from '../query-executor/query-executor.js'; ++import { QueryId } from '../util/query-id.js'; ++import { DropTriggerNode } from '../operation-node/drop-trigger-node.js'; ++export declare class DropTriggerBuilder implements OperationNodeSource, Compilable { ++ #private; ++ constructor(props: DropTriggerBuilderProps); ++ ifExists(): DropTriggerBuilder; ++ cascade(): DropTriggerBuilder; ++ /** ++ * Simply calls the provided function passing `this` as the only argument. `$call` returns ++ * what the provided function returns. ++ */ ++ $call(func: (qb: this) => T): T; ++ toOperationNode(): DropTriggerNode; ++ compile(): CompiledQuery; ++ execute(): Promise; ++} ++export interface DropTriggerBuilderProps { ++ readonly queryId: QueryId; ++ readonly executor: QueryExecutor; ++ readonly node: DropTriggerNode; ++} +diff --git a/node_modules/kysely/dist/esm/schema/drop-trigger-builder.js b/node_modules/kysely/dist/esm/schema/drop-trigger-builder.js +new file mode 100644 +index 0000000..0a0f2e1 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/schema/drop-trigger-builder.js +@@ -0,0 +1,43 @@ ++/// ++import { preventAwait } from '../util/prevent-await.js'; ++import { freeze } from '../util/object-utils.js'; ++import { DropTriggerNode } from '../operation-node/drop-trigger-node.js'; ++export class DropTriggerBuilder { ++ #props; ++ constructor(props) { ++ this.#props = freeze(props); ++ } ++ ifExists() { ++ return new DropTriggerBuilder({ ++ ...this.#props, ++ node: DropTriggerNode.cloneWith(this.#props.node, { ++ ifExists: true, ++ }), ++ }); ++ } ++ cascade() { ++ return new DropTriggerBuilder({ ++ ...this.#props, ++ node: DropTriggerNode.cloneWith(this.#props.node, { ++ cascade: true, ++ }), ++ }); ++ } ++ /** ++ * Simply calls the provided function passing `this` as the only argument. `$call` returns ++ * what the provided function returns. ++ */ ++ $call(func) { ++ return func(this); ++ } ++ toOperationNode() { ++ return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId); ++ } ++ compile() { ++ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId); ++ } ++ async execute() { ++ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId); ++ } ++} ++preventAwait(DropTriggerBuilder, "don't await DropTriggerBuilder instances directly. To execute the query you need to call `execute`"); +diff --git a/node_modules/kysely/dist/esm/schema/schema.d.ts b/node_modules/kysely/dist/esm/schema/schema.d.ts +index 8634b84..19cf68c 100644 +--- a/node_modules/kysely/dist/esm/schema/schema.d.ts ++++ b/node_modules/kysely/dist/esm/schema/schema.d.ts +@@ -11,10 +11,12 @@ import { DropViewBuilder } from './drop-view-builder.js'; + import { KyselyPlugin } from '../plugin/kysely-plugin.js'; + import { CreateTypeBuilder } from './create-type-builder.js'; + import { DropTypeBuilder } from './drop-type-builder.js'; ++import { CreateTriggerBuilder } from './create-trigger-builder.js'; ++import { DropTriggerBuilder } from './drop-trigger-builder.js'; + /** + * Provides methods for building database schema. + */ +-export declare class SchemaModule { ++export declare class SchemaModule { + #private; + constructor(executor: QueryExecutor); + /** +@@ -201,16 +203,18 @@ export declare class SchemaModule { + * ``` + */ + dropType(typeName: string): DropTypeBuilder; ++ createTrigger(name: string): CreateTriggerBuilder; ++ dropTrigger(triggerName: string): DropTriggerBuilder; + /** + * Returns a copy of this schema module with the given plugin installed. + */ +- withPlugin(plugin: KyselyPlugin): SchemaModule; ++ withPlugin(plugin: KyselyPlugin): SchemaModule; + /** + * Returns a copy of this schema module without any plugins. + */ +- withoutPlugins(): SchemaModule; ++ withoutPlugins(): SchemaModule; + /** + * See {@link QueryCreator.withSchema} + */ +- withSchema(schema: string): SchemaModule; ++ withSchema(schema: string): SchemaModule; + } +diff --git a/node_modules/kysely/dist/esm/schema/schema.js b/node_modules/kysely/dist/esm/schema/schema.js +index 8244039..4ba6917 100644 +--- a/node_modules/kysely/dist/esm/schema/schema.js ++++ b/node_modules/kysely/dist/esm/schema/schema.js +@@ -25,6 +25,11 @@ import { DropTypeBuilder } from './drop-type-builder.js'; + import { CreateTypeNode } from '../operation-node/create-type-node.js'; + import { DropTypeNode } from '../operation-node/drop-type-node.js'; + import { parseSchemableIdentifier } from '../parser/identifier-parser.js'; ++import { CreateTriggerBuilder } from './create-trigger-builder.js'; ++import { CreateTriggerNode } from '../operation-node/create-trigger-node.js'; ++import { IdentifierNode } from '../operation-node/identifier-node.js'; ++import { DropTriggerNode } from '../operation-node/drop-trigger-node.js'; ++import { DropTriggerBuilder } from './drop-trigger-builder.js'; + /** + * Provides methods for building database schema. + */ +@@ -283,6 +288,20 @@ export class SchemaModule { + node: DropTypeNode.create(parseSchemableIdentifier(typeName)), + }); + } ++ createTrigger(name) { ++ return new CreateTriggerBuilder({ ++ queryId: createQueryId(), ++ executor: this.#executor, ++ node: CreateTriggerNode.create(IdentifierNode.create(name)), ++ }); ++ } ++ dropTrigger(triggerName) { ++ return new DropTriggerBuilder({ ++ queryId: createQueryId(), ++ executor: this.#executor, ++ node: DropTriggerNode.create(parseSchemableIdentifier(triggerName)), ++ }); ++ } + /** + * Returns a copy of this schema module with the given plugin installed. + */ +diff --git a/node_modules/kysely/dist/esm/schema/unique-constraint-builder.d.ts b/node_modules/kysely/dist/esm/schema/unique-constraint-builder.d.ts +new file mode 100644 +index 0000000..4362213 +--- /dev/null ++++ b/node_modules/kysely/dist/esm/schema/unique-constraint-builder.d.ts +@@ -0,0 +1,14 @@ ++import { OperationNodeSource } from '../operation-node/operation-node-source.js'; ++import { UniqueConstraintNode } from '../operation-node/unique-constraint-node.js'; ++export declare class UniqueConstraintNodeBuilder implements OperationNodeSource { ++ #private; ++ constructor(node: UniqueConstraintNode); ++ toOperationNode(): UniqueConstraintNode; ++ /** ++ * Adds `nulls not distinct` to the unique constraint definition ++ * ++ * Supported by PostgreSQL dialect only ++ */ ++ nullsNotDistinct(): UniqueConstraintNodeBuilder; ++} ++export type UniqueConstraintNodeBuilderCallback = (builder: UniqueConstraintNodeBuilder) => UniqueConstraintNodeBuilder; +diff --git a/node_modules/kysely/dist/esm/schema/unique-constraint-builder.js b/node_modules/kysely/dist/esm/schema/unique-constraint-builder.js +new file mode 100644 +index 0000000..dba8cef +--- /dev/null ++++ b/node_modules/kysely/dist/esm/schema/unique-constraint-builder.js +@@ -0,0 +1,21 @@ ++/// ++import { UniqueConstraintNode } from '../operation-node/unique-constraint-node.js'; ++import { preventAwait } from '../util/prevent-await.js'; ++export class UniqueConstraintNodeBuilder { ++ #node; ++ constructor(node) { ++ this.#node = node; ++ } ++ toOperationNode() { ++ return this.#node; ++ } ++ /** ++ * Adds `nulls not distinct` to the unique constraint definition ++ * ++ * Supported by PostgreSQL dialect only ++ */ ++ nullsNotDistinct() { ++ return new UniqueConstraintNodeBuilder(UniqueConstraintNode.cloneWith(this.#node, { nullsNotDistinct: true })); ++ } ++} ++preventAwait(UniqueConstraintNodeBuilder, "don't await UniqueConstraintNodeBuilder instances directly."); +diff --git a/node_modules/kysely/dist/esm/trigger-query-creator.d.ts b/node_modules/kysely/dist/esm/trigger-query-creator.d.ts +new file mode 100644 +index 0000000..51d0b2f +--- /dev/null ++++ b/node_modules/kysely/dist/esm/trigger-query-creator.d.ts +@@ -0,0 +1,35 @@ ++import { SelectQueryBuilder } from './query-builder/select-query-builder.js'; ++import { InsertQueryBuilder } from './query-builder/insert-query-builder.js'; ++import { DeleteQueryBuilder } from './query-builder/delete-query-builder.js'; ++import { UpdateQueryBuilder } from './query-builder/update-query-builder.js'; ++import { TableExpression, From, FromTables, TableReference, ExtractTableAlias, AnyAliasedTable, PickTableWithAlias } from './parser/table-parser.js'; ++import { InsertResult } from './query-builder/insert-result.js'; ++import { DeleteResult } from './query-builder/delete-result.js'; ++import { UpdateResult } from './query-builder/update-result.js'; ++import { KyselyPlugin } from './plugin/kysely-plugin.js'; ++import { CallbackSelection, SelectCallback, SelectExpression, Selection } from './parser/select-parser.js'; ++import { QueryCreatorProps } from './query-creator.js'; ++import { DatabaseWithOldNewTables } from './schema/create-trigger-builder.js'; ++export declare class TriggerQueryCreator { ++ #private; ++ constructor(props: QueryCreatorProps); ++ selectFrom(from: TE[]): SelectQueryBuilder, ExtractTableAlias | 'new' | 'old', {}>; ++ selectFrom>(from: TE[]): SelectQueryBuilder, TE>, FromTables | 'new' | 'old', {}>; ++ selectFrom(from: TE): SelectQueryBuilder, ExtractTableAlias | 'new' | 'old', {}>; ++ selectFrom>(from: TE): SelectQueryBuilder & PickTableWithAlias, TE>, ExtractTableAlias | 'new' | 'old', {}>; ++ selectFrom>(from: TE): SelectQueryBuilder, TE>, FromTables | 'new' | 'old', {}>; ++ selectNoFrom>(selections: ReadonlyArray): SelectQueryBuilder>; ++ selectNoFrom>(callback: CB): SelectQueryBuilder>; ++ selectNoFrom>(selection: SE): SelectQueryBuilder>; ++ insertInto(table: T): InsertQueryBuilder; ++ replaceInto(table: T): InsertQueryBuilder; ++ deleteFrom(from: TR[]): DeleteQueryBuilder, ExtractTableAlias | 'new' | 'old', DeleteResult>; ++ deleteFrom>(tables: TR[]): DeleteQueryBuilder, TR>, FromTables | 'new' | 'old', DeleteResult>; ++ deleteFrom(from: TR): DeleteQueryBuilder, ExtractTableAlias | 'new' | 'old', DeleteResult>; ++ deleteFrom>(table: TR): DeleteQueryBuilder, TR>, FromTables | 'new' | 'old', DeleteResult>; ++ updateTable(table: TR): UpdateQueryBuilder, ExtractTableAlias, UpdateResult>; ++ updateTable>(table: TR): UpdateQueryBuilder, ExtractTableAlias, ExtractTableAlias, UpdateResult>; ++ updateTable>(table: TR): UpdateQueryBuilder, FromTables, FromTables, UpdateResult>; ++ withPlugin(plugin: KyselyPlugin): TriggerQueryCreator; ++ withoutPlugins(): TriggerQueryCreator; ++} +diff --git a/node_modules/kysely/dist/esm/trigger-query-creator.js b/node_modules/kysely/dist/esm/trigger-query-creator.js +new file mode 100644 +index 0000000..c8960dc +--- /dev/null ++++ b/node_modules/kysely/dist/esm/trigger-query-creator.js +@@ -0,0 +1,73 @@ ++/// ++import { createSelectQueryBuilder, } from './query-builder/select-query-builder.js'; ++import { InsertQueryBuilder } from './query-builder/insert-query-builder.js'; ++import { DeleteQueryBuilder } from './query-builder/delete-query-builder.js'; ++import { UpdateQueryBuilder } from './query-builder/update-query-builder.js'; ++import { DeleteQueryNode } from './operation-node/delete-query-node.js'; ++import { InsertQueryNode } from './operation-node/insert-query-node.js'; ++import { SelectQueryNode } from './operation-node/select-query-node.js'; ++import { UpdateQueryNode } from './operation-node/update-query-node.js'; ++import { parseTable, parseTableExpression, parseTableExpressionOrList, } from './parser/table-parser.js'; ++import { createQueryId } from './util/query-id.js'; ++import { freeze } from './util/object-utils.js'; ++import { parseSelectArg, } from './parser/select-parser.js'; ++export class TriggerQueryCreator { ++ #props; ++ constructor(props) { ++ this.#props = freeze(props); ++ } ++ selectFrom(from) { ++ return createSelectQueryBuilder({ ++ queryId: createQueryId(), ++ executor: this.#props.executor, ++ queryNode: SelectQueryNode.createFrom(parseTableExpressionOrList(from), this.#props.withNode), ++ }); ++ } ++ selectNoFrom(selection) { ++ return createSelectQueryBuilder({ ++ queryId: createQueryId(), ++ executor: this.#props.executor, ++ queryNode: SelectQueryNode.cloneWithSelections(SelectQueryNode.create(this.#props.withNode), parseSelectArg(selection)), ++ }); ++ } ++ insertInto(table) { ++ return new InsertQueryBuilder({ ++ queryId: createQueryId(), ++ executor: this.#props.executor, ++ queryNode: InsertQueryNode.create(parseTable(table), this.#props.withNode), ++ }); ++ } ++ replaceInto(table) { ++ return new InsertQueryBuilder({ ++ queryId: createQueryId(), ++ executor: this.#props.executor, ++ queryNode: InsertQueryNode.create(parseTable(table), this.#props.withNode, true), ++ }); ++ } ++ deleteFrom(tables) { ++ return new DeleteQueryBuilder({ ++ queryId: createQueryId(), ++ executor: this.#props.executor, ++ queryNode: DeleteQueryNode.create(parseTableExpressionOrList(tables), this.#props.withNode), ++ }); ++ } ++ updateTable(table) { ++ return new UpdateQueryBuilder({ ++ queryId: createQueryId(), ++ executor: this.#props.executor, ++ queryNode: UpdateQueryNode.create(parseTableExpression(table), this.#props.withNode), ++ }); ++ } ++ withPlugin(plugin) { ++ return new TriggerQueryCreator({ ++ ...this.#props, ++ executor: this.#props.executor.withPlugin(plugin), ++ }); ++ } ++ withoutPlugins() { ++ return new TriggerQueryCreator({ ++ ...this.#props, ++ executor: this.#props.executor.withoutPlugins(), ++ }); ++ } ++} +diff --git a/node_modules/kysely/dist/esm/util/object-utils.d.ts b/node_modules/kysely/dist/esm/util/object-utils.d.ts +index 1b9f563..c9fa82b 100644 +--- a/node_modules/kysely/dist/esm/util/object-utils.d.ts ++++ b/node_modules/kysely/dist/esm/util/object-utils.d.ts +@@ -6,7 +6,7 @@ export declare function isNumber(obj: unknown): obj is number; + export declare function isBoolean(obj: unknown): obj is boolean; + export declare function isNull(obj: unknown): obj is null; + export declare function isDate(obj: unknown): obj is Date; +-export declare function isBigInt(obj: unknown): obj is BigInt; ++export declare function isBigInt(obj: unknown): obj is bigint; + export declare function isBuffer(obj: unknown): obj is { + length: number; + }; diff --git a/packages/core/src/api/lookup.ts b/packages/core/src/api/lookup.ts index 17240225f..2a614eda9 100644 --- a/packages/core/src/api/lookup.ts +++ b/packages/core/src/api/lookup.ts @@ -19,7 +19,7 @@ along with this program. If not, see . import { match } from "fuzzyjs"; import Database from "."; -import { Item, TrashItem } from "../types"; +import { Item, Note, TrashItem } from "../types"; import { DatabaseSchema, DatabaseSchemaWithFTS, isFalse } from "../database"; import { AnyColumnWithTable, Kysely, sql } from "kysely"; import { FilteredSelector } from "../database/sql-collection"; @@ -39,8 +39,10 @@ type FuzzySearchField = { export default class Lookup { constructor(private readonly db: Database) {} - notes(query: string, noteIds?: string[]) { + notes(query: string, notes?: FilteredSelector): SearchResults { return this.toSearchResults(async (limit) => { + if (query.length <= 3) return []; + const db = this.db.sql() as Kysely; query = query.replace(/"/, '""'); const result = await db @@ -58,8 +60,8 @@ export default class Lookup { ) ) .selectFrom("notes") - .$if(!!noteIds && noteIds.length > 0, (eb) => - eb.where("notes.id", "in", noteIds!) + .$if(!!notes, (eb) => + eb.where("notes.id", "in", notes!.filter.select("id")) ) .$if(!!limit, (eb) => eb.limit(limit!)) .where(isFalse("notes.deleted")) @@ -67,11 +69,11 @@ export default class Lookup { .innerJoin("matching", (eb) => eb.onRef("notes.id", "==", "matching.id") ) - .orderBy("matching.rank") + .orderBy("matching.rank desc") .select(["notes.id"]) .execute(); return result.map((id) => id.id); - }, this.db.notes.all); + }, notes || this.db.notes.all); } notebooks(query: string) { diff --git a/packages/core/src/collections/content.ts b/packages/core/src/collections/content.ts index 6203f52f6..54d84679e 100644 --- a/packages/core/src/collections/content.ts +++ b/packages/core/src/collections/content.ts @@ -103,6 +103,7 @@ export class Content implements ICollection { localOnly: content.localOnly, conflicted: content.conflicted, dateResolved: content.dateResolved, + noteId: content.noteId, ...contentData }); diff --git a/packages/core/src/collections/notes.ts b/packages/core/src/collections/notes.ts index 40f204df7..67b6989ec 100644 --- a/packages/core/src/collections/notes.ts +++ b/packages/core/src/collections/notes.ts @@ -67,75 +67,80 @@ export class Notes implements ICollection { throw new Error("Please use db.notes.merge to merge remote notes."); const id = item.id || getId(); + const isUpdating = item.id && (await this.exists(item.id)); - const oldNote = await this.note(id); - - const note = { - ...oldNote, - ...item - }; - - let dateEdited = note.dateEdited || note.dateCreated || Date.now(); - if (oldNote) note.contentId = oldNote.contentId; - - if (!oldNote && !item.content && !item.contentId && !item.title) + if (!isUpdating && !item.content && !item.contentId && !item.title) throw new Error("Note must have a title or content."); await this.db.transaction(async () => { - if (item.content && item.content.data && item.content.type) { - if (oldNote) dateEdited = Date.now(); + let contentId = item.contentId; + let dateEdited = item.dateEdited; + let headline = ""; + if (item.content && item.content.data && item.content.type) { const { type, data } = item.content; const content = getContentFromData(type, data); if (!content) throw new Error("Invalid content type."); - note.contentId = await this.db.content.add({ + headline = item.locked ? "" : getNoteHeadline(content); + dateEdited = Date.now(); + contentId = await this.db.content.add({ noteId: id, - sessionId: note.sessionId, - id: note.contentId, + sessionId: item.sessionId, + id: contentId, dateEdited, type, data, - localOnly: !!note.localOnly + ...(item.localOnly !== undefined ? { localOnly: item.localOnly } : {}) }); - - note.headline = note.locked ? "" : getNoteHeadline(content); - } - - if (note.contentId && item.localOnly !== undefined) { + } else if (contentId && item.localOnly !== undefined) { await this.db.content.add({ - id: note.contentId, + id: contentId, localOnly: !!item.localOnly }); } - const noteTitle = await this.getNoteTitle(note, oldNote, note.headline); - if (oldNote && oldNote.title !== noteTitle) dateEdited = Date.now(); + if (item.title) { + item.title = this.getNoteTitle(item.title, headline); + dateEdited = Date.now(); + } - await this.collection.upsert({ - id, - contentId: note.contentId, - type: "note", + if (isUpdating) { + await this.collection.update([id], { + title: item.title, + headline, - title: noteTitle, - headline: note.headline, + pinned: item.pinned, + locked: item.locked, + favorite: item.favorite, + localOnly: item.localOnly, + conflicted: item.conflicted, + readonly: item.readonly, - notebooks: note.notebooks || undefined, + dateEdited: item.dateEdited || dateEdited + }); + } else { + await this.collection.upsert({ + id, + type: "note", + contentId, - pinned: !!note.pinned, - locked: !!note.locked, - favorite: !!note.favorite, - localOnly: !!note.localOnly, - conflicted: !!note.conflicted, - readonly: !!note.readonly, + title: item.title, + headline: headline, - dateCreated: note.dateCreated || Date.now(), - dateEdited: item.dateEdited || dateEdited, - dateModified: note.dateModified || Date.now() - }); + pinned: item.pinned, + locked: item.locked, + favorite: item.favorite, + localOnly: item.localOnly, + conflicted: item.conflicted, + readonly: item.readonly, - if (!oldNote) this.totalNotes++; + dateCreated: item.dateCreated || Date.now(), + dateEdited: item.dateEdited || dateEdited || Date.now() + }); + this.totalNotes++; + } }); return id; } @@ -386,20 +391,9 @@ export class Notes implements ICollection { }); } - private async getNoteTitle( - note: Partial, - oldNote?: Note, - headline?: string - ) { - if (note.title && note.title.trim().length > 0) { - return note.title.replace(NEWLINE_STRIP_REGEX, " "); - } else if ( - oldNote && - oldNote.title && - oldNote.title.trim().length > 0 && - (note.title === undefined || note.title === null) - ) { - return oldNote.title.replace(NEWLINE_STRIP_REGEX, " "); + private getNoteTitle(title: string, headline?: string) { + if (title.trim().length > 0) { + return title.replace(NEWLINE_STRIP_REGEX, " "); } return formatTitle( diff --git a/packages/core/src/database/index.ts b/packages/core/src/database/index.ts index 951b3c646..bb372356c 100644 --- a/packages/core/src/database/index.ts +++ b/packages/core/src/database/index.ts @@ -56,6 +56,7 @@ import { ValueOf } from "../types"; import { NNMigrationProvider } from "./migrations"; +import { createTriggers } from "./triggers"; // type FilteredKeys = { // [P in keyof T]: T[P] extends U ? P : never; @@ -69,7 +70,7 @@ export type SQLiteItem = { [P in keyof T]?: T[P] | null; } & { id: string }; -export type SQLiteItemWithRowID = SQLiteItem & { rowid: number }; +export type SQLiteItemWithRowID = SQLiteItem & { rowid?: number }; export interface DatabaseSchema { notes: SQLiteItem>; @@ -206,7 +207,7 @@ export type SQLiteOptions = { pageSize?: number; }; export async function createDatabase(name: string, options: SQLiteOptions) { - const db = new Kysely({ + const db = new Kysely({ dialect: options.dialect(name), plugins: [new SqliteBooleanPlugin()] }); @@ -224,6 +225,10 @@ export async function createDatabase(name: string, options: SQLiteOptions) { options.synchronous || "normal" )}`.execute(db); + // recursive_triggers are required so that SQLite fires DELETE trigger on + // REPLACE INTO statements + await sql`PRAGMA recursive_triggers = true`.execute(db); + if (options.pageSize) await sql`PRAGMA page_size = ${sql.raw( options.pageSize.toString() @@ -242,7 +247,22 @@ export async function createDatabase(name: string, options: SQLiteOptions) { db ); - await migrator.migrateToLatest(); + const { error, results } = await migrator.migrateToLatest(); + + results?.forEach((it) => { + if (it.status === "Success") { + console.log(`migration "${it.migrationName}" was executed successfully`); + } else if (it.status === "Error") { + console.error(`failed to execute migration "${it.migrationName}"`); + } + }); + + if (error) { + console.error("failed to run `migrateToLatest`"); + console.error(error); + } + + await createTriggers(db); return db; } diff --git a/packages/core/src/database/migrations.ts b/packages/core/src/database/migrations.ts index 612f9b16c..b028870d3 100644 --- a/packages/core/src/database/migrations.ts +++ b/packages/core/src/database/migrations.ts @@ -20,7 +20,6 @@ along with this program. If not, see . import { ColumnBuilderCallback, CreateTableBuilder, - Kysely, Migration, MigrationProvider, sql @@ -50,7 +49,12 @@ export class NNMigrationProvider implements MigrationProvider { .addColumn("readonly", "boolean") .addColumn("dateEdited", "integer") .execute(); - await createFTS5Table(db, "notes", ["title"]); + + await createFTS5Table( + "notes_fts", + [{ name: "id" }, { name: "title" }], + { contentTable: "notes", tokenizer: ["porter", "trigram"] } + ).execute(db); await db.schema .createTable("content") @@ -65,13 +69,12 @@ export class NNMigrationProvider implements MigrationProvider { .addColumn("dateEdited", "integer") .addColumn("dateResolved", "integer") .execute(); + await createFTS5Table( - db, - "content", - ["data"], - ["noteId"], - ["(new.locked is null or new.locked == 0)"] - ); + "content_fts", + [{ name: "id" }, { name: "noteId" }, { name: "data" }], + { contentTable: "content", tokenizer: ["porter", "trigram"] } + ).execute(db); await db.schema .createTable("notehistory") @@ -285,50 +288,38 @@ const addTrashColumns = ( .addColumn("itemType", "text"); }; -async function createFTS5Table( - db: Kysely, - table: string, - indexedColumns: string[], - unindexedColumns: string[] = [], - insertConditions: string[] = [] +type Tokenizer = "porter" | "trigram" | "unicode61" | "ascii"; +function createFTS5Table( + name: string, + columns: { + name: string; + unindexed?: boolean; + }[], + options: { + contentTable?: string; + contentTableRowId?: string; + tokenizer?: Tokenizer[]; + prefix?: number[]; + columnSize?: 0 | 1; + detail?: "full" | "column" | "none"; + } = {} ) { - const ref = sql.raw(table); - const ref_fts = sql.raw(table + "_fts"); - const ref_ai = sql.raw(table + "_ai"); - const ref_ad = sql.raw(table + "_ad"); - const ref_au = sql.raw(table + "_au"); - const indexed_cols = sql.raw(indexedColumns.join(", ")); - const unindexed_cols = - unindexedColumns.length > 0 - ? sql.raw(unindexedColumns.join(" UNINDEXED,") + " UNINDEXED,") - : sql.raw(""); - const new_indexed_cols = sql.raw(indexedColumns.join(", new.")); - const old_indexed_cols = sql.raw(indexedColumns.join(", old.")); - await sql`CREATE VIRTUAL TABLE ${ref_fts} USING fts5( - id UNINDEXED, ${unindexed_cols} ${indexed_cols}, content='${sql.raw( - table - )}', tokenize='porter trigram' - )`.execute(db); - insertConditions = [ - "(new.deleted is null or new.deleted == 0)", - ...insertConditions - ]; - await sql`CREATE TRIGGER ${ref_ai} AFTER INSERT ON ${ref} WHEN ${sql.raw( - insertConditions.join(" AND ") - )} - BEGIN - INSERT INTO ${ref_fts}(rowid, id, ${indexed_cols}) VALUES (new.rowid, new.id, new.${new_indexed_cols}); - END;`.execute(db); - await sql`CREATE TRIGGER ${ref_ad} AFTER DELETE ON ${ref} - BEGIN - INSERT INTO ${ref_fts} (${ref_fts}, rowid, id, ${indexed_cols}) - VALUES ('delete', old.rowid, old.id, old.${old_indexed_cols}); - END;`.execute(db); - await sql`CREATE TRIGGER ${ref_au} AFTER UPDATE ON ${ref} - BEGIN - INSERT INTO ${ref_fts} (${ref_fts}, rowid, id, ${indexed_cols}) - VALUES ('delete', old.rowid, old.id, old.${old_indexed_cols}); - INSERT INTO ${ref_fts} (rowid, id, ${indexed_cols}) - VALUES (new.rowid, new.id, new.${new_indexed_cols}); - END;`.execute(db); + const _options: string[] = []; + if (options.contentTable) _options.push(`content='${options.contentTable}'`); + if (options.contentTableRowId) + _options.push(`content_rowid='${options.contentTableRowId}'`); + if (options.tokenizer) + _options.push(`tokenize='${options.tokenizer.join(" ")}'`); + if (options.prefix) _options.push(`prefix='${options.prefix.join(" ")}'`); + if (options.columnSize) _options.push(`columnsize='${options.columnSize}'`); + if (options.detail) _options.push(`detail='${options.detail}'`); + + const args = sql.join([ + sql.join( + columns.map((c) => sql.ref(`${c.name}${c.unindexed ? " UNINDEXED" : ""}`)) + ), + sql.join(_options.map((o) => sql.raw(o))) + ]); + + return sql`CREATE VIRTUAL TABLE ${sql.raw(name)} USING fts5(${args})`; } diff --git a/packages/core/src/database/triggers.ts b/packages/core/src/database/triggers.ts new file mode 100644 index 000000000..1e7f984aa --- /dev/null +++ b/packages/core/src/database/triggers.ts @@ -0,0 +1,144 @@ +/* +This file is part of the Notesnook project (https://notesnook.com/) + +Copyright (C) 2023 Streetwriters (Private) Limited + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +import { Kysely, sql } from "kysely"; +import { DatabaseSchemaWithFTS } from "."; + +export async function createTriggers(db: Kysely) { + // content triggers + await db.schema + .createTrigger("content_after_insert_content_fts") + .temporary() + .onTable("content", "main") + .after() + .addEvent("insert") + .when((eb) => + eb.and([ + eb.or([eb("new.deleted", "is", null), eb("new.deleted", "==", false)]), + eb.or([eb("new.locked", "is", null), eb("new.locked", "==", false)]) + ]) + ) + .addQuery((c) => + c.insertInto("content_fts").values({ + id: sql`new.id`, + data: sql`new.data`, + noteId: sql`new.noteId` + }) + ) + .execute(); + + await db.schema + .createTrigger("content_after_delete_content_fts") + .temporary() + .onTable("content", "main") + .after() + .addEvent("delete") + .addQuery((c) => + c.insertInto("content_fts").values({ + content_fts: sql.lit("delete"), + id: sql.ref("old.id"), + rowid: sql.ref("old.rowid"), + data: sql.ref("old.data"), + noteId: sql.ref("old.noteId") + }) + ) + .execute(); + + await db.schema + .createTrigger("content_after_update_content_fts") + .temporary() + .onTable("content", "main") + .after() + .addEvent("update", ["data"]) + .addQuery((c) => + c.insertInto("content_fts").values({ + content_fts: sql.lit("delete"), + id: sql.ref("old.id"), + rowid: sql.ref("old.rowid"), + data: sql.ref("old.data"), + noteId: sql.ref("old.noteId") + }) + ) + .addQuery((c) => + c.insertInto("content_fts").values({ + id: sql`new.id`, + data: sql`IIF(new.locked == 1, "", new.data)`, + noteId: sql`new.noteId` + }) + ) + .execute(); + + // notes triggers + await db.schema + .createTrigger("notes_after_insert_notes_fts") + .temporary() + .onTable("notes", "main") + .after() + .addEvent("insert") + .when((eb) => + eb.and([ + eb.or([eb("new.deleted", "is", null), eb("new.deleted", "==", false)]) + ]) + ) + .addQuery((c) => + c.insertInto("notes_fts").values({ + id: sql.ref("new.id"), + title: sql.ref("new.title") + }) + ) + .execute(); + + await db.schema + .createTrigger("notes_after_delete_notes_fts") + .temporary() + .onTable("notes", "main") + .after() + .addEvent("delete") + .addQuery((c) => + c.insertInto("notes_fts").values({ + notes_fts: sql.lit("delete"), + id: sql.ref("old.id"), + rowid: sql.ref("old.rowid"), + title: sql.ref("old.title") + }) + ) + .execute(); + + await db.schema + .createTrigger("notes_after_update_notes_fts") + .temporary() + .onTable("notes", "main") + .after() + .addEvent("update", ["title"]) + .addQuery((c) => + c.insertInto("notes_fts").values({ + notes_fts: sql.lit("delete"), + id: sql.ref("old.id"), + rowid: sql.ref("old.rowid"), + title: sql.ref("old.title") + }) + ) + .addQuery((c) => + c.insertInto("notes_fts").values({ + id: sql.ref("new.id"), + title: sql.ref("new.title") + }) + ) + .execute(); +}