UNPKG

kysely

Version:
308 lines (307 loc) 9.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SchemaModule = void 0; const alter_table_node_js_1 = require("../operation-node/alter-table-node.js"); const create_index_node_js_1 = require("../operation-node/create-index-node.js"); const create_schema_node_js_1 = require("../operation-node/create-schema-node.js"); const create_table_node_js_1 = require("../operation-node/create-table-node.js"); const drop_index_node_js_1 = require("../operation-node/drop-index-node.js"); const drop_schema_node_js_1 = require("../operation-node/drop-schema-node.js"); const drop_table_node_js_1 = require("../operation-node/drop-table-node.js"); const table_parser_js_1 = require("../parser/table-parser.js"); const alter_table_builder_js_1 = require("./alter-table-builder.js"); const create_index_builder_js_1 = require("./create-index-builder.js"); const create_schema_builder_js_1 = require("./create-schema-builder.js"); const create_table_builder_js_1 = require("./create-table-builder.js"); const drop_index_builder_js_1 = require("./drop-index-builder.js"); const drop_schema_builder_js_1 = require("./drop-schema-builder.js"); const drop_table_builder_js_1 = require("./drop-table-builder.js"); const query_id_js_1 = require("../util/query-id.js"); const with_schema_plugin_js_1 = require("../plugin/with-schema/with-schema-plugin.js"); const create_view_builder_js_1 = require("./create-view-builder.js"); const create_view_node_js_1 = require("../operation-node/create-view-node.js"); const drop_view_builder_js_1 = require("./drop-view-builder.js"); const drop_view_node_js_1 = require("../operation-node/drop-view-node.js"); const create_type_builder_js_1 = require("./create-type-builder.js"); 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"); /** * Provides methods for building database schema. */ class SchemaModule { #executor; constructor(executor) { this.#executor = executor; } /** * Create a new table. * * ### Examples * * This example creates a new table with columns `id`, `first_name`, * `last_name` and `gender`: * * ```ts * await db.schema * .createTable('person') * .addColumn('id', 'integer', col => col.primaryKey().autoIncrement()) * .addColumn('first_name', 'varchar', col => col.notNull()) * .addColumn('last_name', 'varchar', col => col.notNull()) * .addColumn('gender', 'varchar') * .execute() * ``` * * This example creates a table with a foreign key. Not all database * engines support column-level foreign key constraint definitions. * For example if you are using MySQL 5.X see the next example after * this one. * * ```ts * await db.schema * .createTable('pet') * .addColumn('id', 'integer', col => col.primaryKey().autoIncrement()) * .addColumn('owner_id', 'integer', col => col * .references('person.id') * .onDelete('cascade') * ) * .execute() * ``` * * This example adds a foreign key constraint for a columns just * like the previous example, but using a table-level statement. * On MySQL 5.X you need to define foreign key constraints like * this: * * ```ts * await db.schema * .createTable('pet') * .addColumn('id', 'integer', col => col.primaryKey().autoIncrement()) * .addColumn('owner_id', 'integer') * .addForeignKeyConstraint( * 'pet_owner_id_foreign', ['owner_id'], 'person', ['id'], * (constraint) => constraint.onDelete('cascade') * ) * .execute() * ``` */ createTable(table) { return new create_table_builder_js_1.CreateTableBuilder({ queryId: (0, query_id_js_1.createQueryId)(), executor: this.#executor, node: create_table_node_js_1.CreateTableNode.create((0, table_parser_js_1.parseTable)(table)), }); } /** * Drop a table. * * ### Examples * * ```ts * await db.schema * .dropTable('person') * .execute() * ``` */ dropTable(table) { return new drop_table_builder_js_1.DropTableBuilder({ queryId: (0, query_id_js_1.createQueryId)(), executor: this.#executor, node: drop_table_node_js_1.DropTableNode.create((0, table_parser_js_1.parseTable)(table)), }); } /** * Create a new index. * * ### Examples * * ```ts * await db.schema * .createIndex('person_full_name_unique_index') * .on('person') * .columns(['first_name', 'last_name']) * .execute() * ``` */ createIndex(indexName) { return new create_index_builder_js_1.CreateIndexBuilder({ queryId: (0, query_id_js_1.createQueryId)(), executor: this.#executor, node: create_index_node_js_1.CreateIndexNode.create(indexName), }); } /** * Drop an index. * * ### Examples * * ```ts * await db.schema * .dropIndex('person_full_name_unique_index') * .execute() * ``` */ dropIndex(indexName) { return new drop_index_builder_js_1.DropIndexBuilder({ queryId: (0, query_id_js_1.createQueryId)(), executor: this.#executor, node: drop_index_node_js_1.DropIndexNode.create(indexName), }); } /** * Create a new schema. * * ### Examples * * ```ts * await db.schema * .createSchema('some_schema') * .execute() * ``` */ createSchema(schema) { return new create_schema_builder_js_1.CreateSchemaBuilder({ queryId: (0, query_id_js_1.createQueryId)(), executor: this.#executor, node: create_schema_node_js_1.CreateSchemaNode.create(schema), }); } /** * Drop a schema. * * ### Examples * * ```ts * await db.schema * .dropSchema('some_schema') * .execute() * ``` */ dropSchema(schema) { return new drop_schema_builder_js_1.DropSchemaBuilder({ queryId: (0, query_id_js_1.createQueryId)(), executor: this.#executor, node: drop_schema_node_js_1.DropSchemaNode.create(schema), }); } /** * Alter a table. * * ### Examples * * ```ts * await db.schema * .alterTable('person') * .alterColumn('first_name', (ac) => ac.setDataType('text')) * .execute() * ``` */ alterTable(table) { return new alter_table_builder_js_1.AlterTableBuilder({ queryId: (0, query_id_js_1.createQueryId)(), executor: this.#executor, node: alter_table_node_js_1.AlterTableNode.create((0, table_parser_js_1.parseTable)(table)), }); } /** * Create a new view. * * ### Examples * * ```ts * await db.schema * .createView('dogs') * .orReplace() * .as(db.selectFrom('pet').selectAll().where('species', '=', 'dog')) * .execute() * ``` */ createView(viewName) { return new create_view_builder_js_1.CreateViewBuilder({ queryId: (0, query_id_js_1.createQueryId)(), executor: this.#executor, node: create_view_node_js_1.CreateViewNode.create(viewName), }); } /** * Drop a view. * * ### Examples * * ```ts * await db.schema * .dropView('dogs') * .ifExists() * .execute() * ``` */ dropView(viewName) { return new drop_view_builder_js_1.DropViewBuilder({ queryId: (0, query_id_js_1.createQueryId)(), executor: this.#executor, node: drop_view_node_js_1.DropViewNode.create(viewName), }); } /** * Create a new type. * * Only some dialects like PostgreSQL have user-defined types. * * ### Examples * * ```ts * await db.schema * .createType('species') * .asEnum(['dog', 'cat', 'frog']) * .execute() * ``` */ createType(typeName) { return new create_type_builder_js_1.CreateTypeBuilder({ queryId: (0, query_id_js_1.createQueryId)(), executor: this.#executor, node: create_type_node_js_1.CreateTypeNode.create((0, identifier_parser_js_1.parseSchemableIdentifier)(typeName)), }); } /** * Drop a type. * * Only some dialects like PostgreSQL have user-defined types. * * ### Examples * * ```ts * await db.schema * .dropType('species') * .ifExists() * .execute() * ``` */ dropType(typeName) { return new drop_type_builder_js_1.DropTypeBuilder({ queryId: (0, query_id_js_1.createQueryId)(), executor: this.#executor, node: drop_type_node_js_1.DropTypeNode.create((0, identifier_parser_js_1.parseSchemableIdentifier)(typeName)), }); } /** * Returns a copy of this schema module with the given plugin installed. */ withPlugin(plugin) { return new SchemaModule(this.#executor.withPlugin(plugin)); } /** * Returns a copy of this schema module without any plugins. */ withoutPlugins() { return new SchemaModule(this.#executor.withoutPlugins()); } /** * See {@link QueryCreator.withSchema} */ withSchema(schema) { return new SchemaModule(this.#executor.withPluginAtFront(new with_schema_plugin_js_1.WithSchemaPlugin(schema))); } } exports.SchemaModule = SchemaModule;