velocious 1.0.431 → 1.0.433
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/application.js +229 -0
- package/build/authorization/ability.js +329 -0
- package/build/authorization/base-resource.js +143 -0
- package/build/background-jobs/client.js +50 -0
- package/build/background-jobs/cron-expression.js +277 -0
- package/build/background-jobs/forked-runner-child.js +86 -0
- package/build/background-jobs/job-record.js +13 -0
- package/build/background-jobs/job-registry.js +92 -0
- package/build/background-jobs/job-runner.js +107 -0
- package/build/background-jobs/job.js +77 -0
- package/build/background-jobs/json-socket.js +78 -0
- package/build/background-jobs/main.js +926 -0
- package/build/background-jobs/normalize-error.js +26 -0
- package/build/background-jobs/scheduler.js +274 -0
- package/build/background-jobs/socket-request.js +68 -0
- package/build/background-jobs/status-reporter.js +101 -0
- package/build/background-jobs/store.js +994 -0
- package/build/background-jobs/types.js +70 -0
- package/build/background-jobs/web/authorization.js +89 -0
- package/build/background-jobs/web/controller.js +280 -0
- package/build/background-jobs/web/index.js +57 -0
- package/build/background-jobs/web/path-matcher.js +74 -0
- package/build/background-jobs/web/registry.js +49 -0
- package/build/background-jobs/worker.js +683 -0
- package/build/beacon/client.js +330 -0
- package/build/beacon/in-process-broker.js +71 -0
- package/build/beacon/in-process-client.js +139 -0
- package/build/beacon/server.js +148 -0
- package/build/beacon/types.js +55 -0
- package/build/cli/base-command.js +67 -0
- package/build/cli/browser-cli.js +45 -0
- package/build/cli/commands/background-jobs-main.js +7 -0
- package/build/cli/commands/background-jobs-runner.js +7 -0
- package/build/cli/commands/background-jobs-worker.js +7 -0
- package/build/cli/commands/beacon.js +7 -0
- package/build/cli/commands/console.js +12 -0
- package/build/cli/commands/db/base-command.js +82 -0
- package/build/cli/commands/db/create.js +64 -0
- package/build/cli/commands/db/drop.js +75 -0
- package/build/cli/commands/db/migrate.js +17 -0
- package/build/cli/commands/db/reset.js +22 -0
- package/build/cli/commands/db/rollback.js +15 -0
- package/build/cli/commands/db/schema/dump.js +12 -0
- package/build/cli/commands/db/schema/load.js +12 -0
- package/build/cli/commands/db/seed.js +12 -0
- package/build/cli/commands/db/tenants/check.js +38 -0
- package/build/cli/commands/db/tenants/create.js +33 -0
- package/build/cli/commands/db/tenants/migrate.js +49 -0
- package/build/cli/commands/destroy/migration.js +7 -0
- package/build/cli/commands/generate/base-models.js +7 -0
- package/build/cli/commands/generate/frontend-models.js +12 -0
- package/build/cli/commands/generate/migration.js +7 -0
- package/build/cli/commands/generate/model.js +7 -0
- package/build/cli/commands/init.js +11 -0
- package/build/cli/commands/routes.js +7 -0
- package/build/cli/commands/run-script.js +12 -0
- package/build/cli/commands/runner.js +12 -0
- package/build/cli/commands/server.js +7 -0
- package/build/cli/commands/test.js +9 -0
- package/build/cli/index.js +152 -0
- package/build/cli/tenant-database-command-helper.js +198 -0
- package/build/cli/use-browser-cli.js +30 -0
- package/build/configuration-resolver.js +65 -0
- package/build/configuration-types.js +429 -0
- package/build/configuration.js +2590 -0
- package/build/controller.js +421 -0
- package/build/current-configuration.js +31 -0
- package/build/current.js +80 -0
- package/build/database/annotations-async-hooks.js +47 -0
- package/build/database/annotations.js +40 -0
- package/build/database/drivers/base-column.js +182 -0
- package/build/database/drivers/base-columns-index.js +81 -0
- package/build/database/drivers/base-foreign-key.js +104 -0
- package/build/database/drivers/base-table.js +156 -0
- package/build/database/drivers/base.js +1609 -0
- package/build/database/drivers/mssql/column.js +74 -0
- package/build/database/drivers/mssql/columns-index.js +6 -0
- package/build/database/drivers/mssql/connect-connection.js +16 -0
- package/build/database/drivers/mssql/foreign-key.js +12 -0
- package/build/database/drivers/mssql/index.js +590 -0
- package/build/database/drivers/mssql/options.js +79 -0
- package/build/database/drivers/mssql/query-parser.js +6 -0
- package/build/database/drivers/mssql/sql/alter-table.js +4 -0
- package/build/database/drivers/mssql/sql/create-database.js +36 -0
- package/build/database/drivers/mssql/sql/create-index.js +4 -0
- package/build/database/drivers/mssql/sql/create-table.js +4 -0
- package/build/database/drivers/mssql/sql/delete.js +19 -0
- package/build/database/drivers/mssql/sql/drop-database.js +36 -0
- package/build/database/drivers/mssql/sql/drop-table.js +4 -0
- package/build/database/drivers/mssql/sql/insert.js +4 -0
- package/build/database/drivers/mssql/sql/update.js +31 -0
- package/build/database/drivers/mssql/sql/upsert.js +23 -0
- package/build/database/drivers/mssql/structure-sql.js +120 -0
- package/build/database/drivers/mssql/table.js +145 -0
- package/build/database/drivers/mysql/column.js +112 -0
- package/build/database/drivers/mysql/columns-index.js +22 -0
- package/build/database/drivers/mysql/foreign-key.js +12 -0
- package/build/database/drivers/mysql/index.js +473 -0
- package/build/database/drivers/mysql/options.js +34 -0
- package/build/database/drivers/mysql/query-parser.js +6 -0
- package/build/database/drivers/mysql/query.js +37 -0
- package/build/database/drivers/mysql/sql/alter-table.js +6 -0
- package/build/database/drivers/mysql/sql/create-database.js +39 -0
- package/build/database/drivers/mysql/sql/create-index.js +6 -0
- package/build/database/drivers/mysql/sql/create-table.js +6 -0
- package/build/database/drivers/mysql/sql/delete.js +21 -0
- package/build/database/drivers/mysql/sql/drop-database.js +6 -0
- package/build/database/drivers/mysql/sql/drop-table.js +6 -0
- package/build/database/drivers/mysql/sql/insert.js +6 -0
- package/build/database/drivers/mysql/sql/update.js +33 -0
- package/build/database/drivers/mysql/sql/upsert.js +13 -0
- package/build/database/drivers/mysql/structure-sql.js +93 -0
- package/build/database/drivers/mysql/table.js +121 -0
- package/build/database/drivers/pgsql/column.js +90 -0
- package/build/database/drivers/pgsql/columns-index.js +6 -0
- package/build/database/drivers/pgsql/foreign-key.js +12 -0
- package/build/database/drivers/pgsql/index.js +441 -0
- package/build/database/drivers/pgsql/options.js +32 -0
- package/build/database/drivers/pgsql/query-parser.js +6 -0
- package/build/database/drivers/pgsql/sql/alter-table.js +6 -0
- package/build/database/drivers/pgsql/sql/create-database.js +38 -0
- package/build/database/drivers/pgsql/sql/create-index.js +6 -0
- package/build/database/drivers/pgsql/sql/create-table.js +6 -0
- package/build/database/drivers/pgsql/sql/delete.js +21 -0
- package/build/database/drivers/pgsql/sql/drop-database.js +6 -0
- package/build/database/drivers/pgsql/sql/drop-table.js +6 -0
- package/build/database/drivers/pgsql/sql/insert.js +6 -0
- package/build/database/drivers/pgsql/sql/update.js +33 -0
- package/build/database/drivers/pgsql/sql/upsert.js +14 -0
- package/build/database/drivers/pgsql/structure-sql.js +126 -0
- package/build/database/drivers/pgsql/table.js +135 -0
- package/build/database/drivers/sqlite/base.js +509 -0
- package/build/database/drivers/sqlite/column.js +75 -0
- package/build/database/drivers/sqlite/columns-index.js +30 -0
- package/build/database/drivers/sqlite/connection-sql-js.js +46 -0
- package/build/database/drivers/sqlite/foreign-key.js +24 -0
- package/build/database/drivers/sqlite/index.js +394 -0
- package/build/database/drivers/sqlite/index.native.js +72 -0
- package/build/database/drivers/sqlite/index.web.js +99 -0
- package/build/database/drivers/sqlite/options.js +32 -0
- package/build/database/drivers/sqlite/query-parser.js +6 -0
- package/build/database/drivers/sqlite/query.js +35 -0
- package/build/database/drivers/sqlite/query.native.js +35 -0
- package/build/database/drivers/sqlite/query.web.js +49 -0
- package/build/database/drivers/sqlite/sql/alter-table.js +187 -0
- package/build/database/drivers/sqlite/sql/create-index.js +6 -0
- package/build/database/drivers/sqlite/sql/create-table.js +6 -0
- package/build/database/drivers/sqlite/sql/delete.js +26 -0
- package/build/database/drivers/sqlite/sql/drop-table.js +6 -0
- package/build/database/drivers/sqlite/sql/insert.js +6 -0
- package/build/database/drivers/sqlite/sql/update.js +33 -0
- package/build/database/drivers/sqlite/sql/upsert.js +14 -0
- package/build/database/drivers/sqlite/structure-sql.js +56 -0
- package/build/database/drivers/sqlite/table-rebuilder.js +96 -0
- package/build/database/drivers/sqlite/table.js +131 -0
- package/build/database/drivers/structure-sql/utils.js +35 -0
- package/build/database/handler.js +13 -0
- package/build/database/initializer-from-require-context.js +101 -0
- package/build/database/migration/index.js +438 -0
- package/build/database/migrator/files-finder.js +55 -0
- package/build/database/migrator/types.js +31 -0
- package/build/database/migrator.js +557 -0
- package/build/database/pool/async-tracked-multi-connection.js +1164 -0
- package/build/database/pool/base-methods-forward.js +52 -0
- package/build/database/pool/base.js +380 -0
- package/build/database/pool/single-multi-use.js +118 -0
- package/build/database/query/alter-table-base.js +104 -0
- package/build/database/query/base.js +49 -0
- package/build/database/query/create-database-base.js +42 -0
- package/build/database/query/create-index-base.js +117 -0
- package/build/database/query/create-table-base.js +205 -0
- package/build/database/query/delete-base.js +19 -0
- package/build/database/query/drop-database-base.js +38 -0
- package/build/database/query/drop-table-base.js +58 -0
- package/build/database/query/from-base.js +36 -0
- package/build/database/query/from-plain.js +16 -0
- package/build/database/query/from-table.js +18 -0
- package/build/database/query/index.js +533 -0
- package/build/database/query/insert-base.js +172 -0
- package/build/database/query/join-base.js +43 -0
- package/build/database/query/join-object.js +167 -0
- package/build/database/query/join-plain.js +18 -0
- package/build/database/query/join-tracker.js +93 -0
- package/build/database/query/model-class-query.js +1577 -0
- package/build/database/query/order-base.js +33 -0
- package/build/database/query/order-column.js +77 -0
- package/build/database/query/order-plain.js +28 -0
- package/build/database/query/preloader/belongs-to.js +267 -0
- package/build/database/query/preloader/ensure-model-class-initialized.js +18 -0
- package/build/database/query/preloader/has-many.js +316 -0
- package/build/database/query/preloader/has-one.js +123 -0
- package/build/database/query/preloader/selection.js +152 -0
- package/build/database/query/preloader.js +201 -0
- package/build/database/query/query-data.js +305 -0
- package/build/database/query/select-base.js +30 -0
- package/build/database/query/select-plain.js +18 -0
- package/build/database/query/select-table-and-column.js +28 -0
- package/build/database/query/update-base.js +41 -0
- package/build/database/query/upsert-base.js +103 -0
- package/build/database/query/where-base.js +38 -0
- package/build/database/query/where-combinator.js +31 -0
- package/build/database/query/where-hash.js +77 -0
- package/build/database/query/where-model-class-hash.js +505 -0
- package/build/database/query/where-not.js +23 -0
- package/build/database/query/where-plain.js +20 -0
- package/build/database/query/with-count.js +219 -0
- package/build/database/query-parser/base-query-parser.js +40 -0
- package/build/database/query-parser/from-parser.js +49 -0
- package/build/database/query-parser/group-parser.js +55 -0
- package/build/database/query-parser/joins-parser.js +37 -0
- package/build/database/query-parser/limit-parser.js +77 -0
- package/build/database/query-parser/options.js +94 -0
- package/build/database/query-parser/order-parser.js +45 -0
- package/build/database/query-parser/select-parser.js +67 -0
- package/build/database/query-parser/where-parser.js +46 -0
- package/build/database/record/acts-as-list.js +374 -0
- package/build/database/record/attachments/download.js +49 -0
- package/build/database/record/attachments/handle.js +188 -0
- package/build/database/record/attachments/normalize-input.js +213 -0
- package/build/database/record/attachments/storage-drivers/filesystem.js +114 -0
- package/build/database/record/attachments/storage-drivers/native.js +146 -0
- package/build/database/record/attachments/storage-drivers/s3.js +245 -0
- package/build/database/record/attachments/store.js +591 -0
- package/build/database/record/index.js +4119 -0
- package/build/database/record/instance-relationships/base.js +289 -0
- package/build/database/record/instance-relationships/belongs-to.js +84 -0
- package/build/database/record/instance-relationships/has-many.js +284 -0
- package/build/database/record/instance-relationships/has-one.js +117 -0
- package/build/database/record/record-not-found-error.js +3 -0
- package/build/database/record/relationships/base.js +195 -0
- package/build/database/record/relationships/belongs-to.js +57 -0
- package/build/database/record/relationships/has-many.js +46 -0
- package/build/database/record/relationships/has-one.js +46 -0
- package/build/database/record/state-machine.js +278 -0
- package/build/database/record/user-module.js +43 -0
- package/build/database/record/validators/base.js +27 -0
- package/build/database/record/validators/format.js +50 -0
- package/build/database/record/validators/presence.js +24 -0
- package/build/database/record/validators/uniqueness.js +124 -0
- package/build/database/table-data/index.js +241 -0
- package/build/database/table-data/table-column.js +416 -0
- package/build/database/table-data/table-foreign-key.js +69 -0
- package/build/database/table-data/table-index.js +46 -0
- package/build/database/table-data/table-reference.js +13 -0
- package/build/database/use-database.js +48 -0
- package/build/environment-handlers/base.js +561 -0
- package/build/environment-handlers/browser.js +338 -0
- package/build/environment-handlers/node/cli/commands/background-jobs-main.js +21 -0
- package/build/environment-handlers/node/cli/commands/background-jobs-runner.js +24 -0
- package/build/environment-handlers/node/cli/commands/background-jobs-worker.js +47 -0
- package/build/environment-handlers/node/cli/commands/beacon.js +21 -0
- package/build/environment-handlers/node/cli/commands/cli-command-context.js +31 -0
- package/build/environment-handlers/node/cli/commands/console.js +149 -0
- package/build/environment-handlers/node/cli/commands/db/schema/dump.js +43 -0
- package/build/environment-handlers/node/cli/commands/db/schema/load.js +69 -0
- package/build/environment-handlers/node/cli/commands/db/seed.js +79 -0
- package/build/environment-handlers/node/cli/commands/destroy/migration.js +47 -0
- package/build/environment-handlers/node/cli/commands/generate/base-models.js +396 -0
- package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +872 -0
- package/build/environment-handlers/node/cli/commands/generate/migration.js +45 -0
- package/build/environment-handlers/node/cli/commands/generate/model.js +45 -0
- package/build/environment-handlers/node/cli/commands/init.js +68 -0
- package/build/environment-handlers/node/cli/commands/routes.js +63 -0
- package/build/environment-handlers/node/cli/commands/run-script.js +85 -0
- package/build/environment-handlers/node/cli/commands/runner.js +84 -0
- package/build/environment-handlers/node/cli/commands/server.js +151 -0
- package/build/environment-handlers/node/cli/commands/test.js +118 -0
- package/build/environment-handlers/node.js +887 -0
- package/build/error-logger.js +30 -0
- package/build/frontend-model-controller.js +3491 -0
- package/build/frontend-model-resource/base-resource.js +939 -0
- package/build/frontend-models/base.js +4004 -0
- package/build/frontend-models/clear-pending-debounced-callback.js +16 -0
- package/build/frontend-models/event-hook-models.js +49 -0
- package/build/frontend-models/model-registry.js +28 -0
- package/build/frontend-models/outgoing-event-buffer.js +51 -0
- package/build/frontend-models/preloader.js +169 -0
- package/build/frontend-models/query.js +2245 -0
- package/build/frontend-models/resource-config-validation.js +56 -0
- package/build/frontend-models/resource-definition.js +399 -0
- package/build/frontend-models/transport-serialization.js +369 -0
- package/build/frontend-models/use-created-event.js +21 -0
- package/build/frontend-models/use-destroyed-event.js +148 -0
- package/build/frontend-models/use-model-class-event.js +164 -0
- package/build/frontend-models/use-updated-event.js +152 -0
- package/build/frontend-models/websocket-channel.js +494 -0
- package/build/frontend-models/websocket-publishers.js +224 -0
- package/build/http-client/header.js +17 -0
- package/build/http-client/index.js +139 -0
- package/build/http-client/request.js +94 -0
- package/build/http-client/response.js +151 -0
- package/build/http-client/websocket-client.js +27 -0
- package/build/http-server/client/index.js +507 -0
- package/build/http-server/client/params-to-object.js +152 -0
- package/build/http-server/client/request-buffer/form-data-part.js +139 -0
- package/build/http-server/client/request-buffer/header.js +19 -0
- package/build/http-server/client/request-buffer/index.js +535 -0
- package/build/http-server/client/request-parser.js +195 -0
- package/build/http-server/client/request-runner.js +321 -0
- package/build/http-server/client/request-timing.js +171 -0
- package/build/http-server/client/request.js +114 -0
- package/build/http-server/client/response.js +251 -0
- package/build/http-server/client/uploaded-file/memory-uploaded-file.js +32 -0
- package/build/http-server/client/uploaded-file/temporary-uploaded-file.js +32 -0
- package/build/http-server/client/uploaded-file/uploaded-file.js +36 -0
- package/build/http-server/client/websocket-request.js +147 -0
- package/build/http-server/client/websocket-session.js +1755 -0
- package/build/http-server/cookie.js +245 -0
- package/build/http-server/development-reloader.js +240 -0
- package/build/http-server/index.js +561 -0
- package/build/http-server/remote-address.js +77 -0
- package/build/http-server/server-client.js +222 -0
- package/build/http-server/server-lock.js +178 -0
- package/build/http-server/websocket-channel-subscribers.js +110 -0
- package/build/http-server/websocket-channel.js +137 -0
- package/build/http-server/websocket-connection.js +118 -0
- package/build/http-server/websocket-event-log-store.js +433 -0
- package/build/http-server/websocket-events-host.js +170 -0
- package/build/http-server/websocket-events.js +50 -0
- package/build/http-server/worker-handler/channel-subscriber-dispatch.js +28 -0
- package/build/http-server/worker-handler/in-process.js +155 -0
- package/build/http-server/worker-handler/index.js +370 -0
- package/build/http-server/worker-handler/worker-script.js +6 -0
- package/build/http-server/worker-handler/worker-thread.js +286 -0
- package/build/initializer.js +39 -0
- package/build/jobs/mail-delivery.js +22 -0
- package/build/logger/base-logger.js +34 -0
- package/build/logger/console-logger.js +28 -0
- package/build/logger/file-logger.js +36 -0
- package/build/logger/outputs/array-output.js +50 -0
- package/build/logger/outputs/console-output.js +32 -0
- package/build/logger/outputs/file-output.js +55 -0
- package/build/logger/outputs/stdout-output.js +64 -0
- package/build/logger.js +507 -0
- package/build/mailer/backends/smtp.js +197 -0
- package/build/mailer/base.js +337 -0
- package/build/mailer/delivery.js +70 -0
- package/build/mailer/index.js +24 -0
- package/build/mailer.js +15 -0
- package/build/plugins/sqljs-wasm-route-controller.js +70 -0
- package/build/plugins/sqljs-wasm-route.js +71 -0
- package/build/record-payload-values.js +83 -0
- package/build/routes/app-routes.js +17 -0
- package/build/routes/base-route.js +133 -0
- package/build/routes/basic-route.js +109 -0
- package/build/routes/built-in/debug/controller.js +12 -0
- package/build/routes/built-in/errors/controller.js +7 -0
- package/build/routes/get-route.js +75 -0
- package/build/routes/hooks/frontend-model-command-route-hook.js +100 -0
- package/build/routes/index.js +50 -0
- package/build/routes/namespace-route.js +51 -0
- package/build/routes/plugin-routes.js +141 -0
- package/build/routes/post-route.js +74 -0
- package/build/routes/resolver.js +535 -0
- package/build/routes/resource-route.js +154 -0
- package/build/routes/root-route.js +11 -0
- package/build/src/application.js +187 -214
- package/build/src/authorization/ability.js +250 -297
- package/build/src/authorization/base-resource.js +120 -136
- package/build/src/background-jobs/client.js +43 -47
- package/build/src/background-jobs/cron-expression.js +127 -166
- package/build/src/background-jobs/forked-runner-child.js +37 -47
- package/build/src/background-jobs/job-record.js +8 -10
- package/build/src/background-jobs/job-registry.js +72 -84
- package/build/src/background-jobs/job-runner.js +74 -81
- package/build/src/background-jobs/job.js +62 -72
- package/build/src/background-jobs/json-socket.js +65 -70
- package/build/src/background-jobs/main.js +841 -900
- package/build/src/background-jobs/normalize-error.js +12 -11
- package/build/src/background-jobs/scheduler.js +205 -247
- package/build/src/background-jobs/socket-request.js +60 -65
- package/build/src/background-jobs/status-reporter.js +86 -96
- package/build/src/background-jobs/store.js +862 -980
- package/build/src/background-jobs/types.js +2 -3
- package/build/src/background-jobs/web/authorization.js +38 -50
- package/build/src/background-jobs/web/controller.js +232 -268
- package/build/src/background-jobs/web/index.js +36 -40
- package/build/src/background-jobs/web/path-matcher.js +45 -48
- package/build/src/background-jobs/web/registry.js +9 -14
- package/build/src/background-jobs/worker.js +585 -639
- package/build/src/beacon/client.js +264 -293
- package/build/src/beacon/in-process-broker.js +20 -25
- package/build/src/beacon/in-process-client.js +104 -116
- package/build/src/beacon/server.js +110 -126
- package/build/src/beacon/types.js +2 -8
- package/build/src/cli/base-command.js +49 -57
- package/build/src/cli/browser-cli.js +37 -42
- package/build/src/cli/commands/background-jobs-main.js +5 -5
- package/build/src/cli/commands/background-jobs-runner.js +5 -5
- package/build/src/cli/commands/background-jobs-worker.js +5 -5
- package/build/src/cli/commands/beacon.js +5 -5
- package/build/src/cli/commands/console.js +10 -10
- package/build/src/cli/commands/db/base-command.js +71 -76
- package/build/src/cli/commands/db/create.js +53 -61
- package/build/src/cli/commands/db/drop.js +62 -71
- package/build/src/cli/commands/db/migrate.js +13 -15
- package/build/src/cli/commands/db/reset.js +16 -19
- package/build/src/cli/commands/db/rollback.js +12 -13
- package/build/src/cli/commands/db/schema/dump.js +9 -9
- package/build/src/cli/commands/db/schema/load.js +9 -9
- package/build/src/cli/commands/db/seed.js +9 -9
- package/build/src/cli/commands/db/tenants/check.js +32 -35
- package/build/src/cli/commands/db/tenants/create.js +26 -29
- package/build/src/cli/commands/db/tenants/migrate.js +40 -44
- package/build/src/cli/commands/destroy/migration.js +5 -5
- package/build/src/cli/commands/generate/base-models.js +5 -5
- package/build/src/cli/commands/generate/frontend-models.js +9 -9
- package/build/src/cli/commands/generate/migration.js +5 -5
- package/build/src/cli/commands/generate/model.js +5 -5
- package/build/src/cli/commands/init.js +7 -9
- package/build/src/cli/commands/routes.js +6 -6
- package/build/src/cli/commands/run-script.js +9 -9
- package/build/src/cli/commands/runner.js +9 -9
- package/build/src/cli/commands/server.js +6 -6
- package/build/src/cli/commands/test.js +6 -7
- package/build/src/cli/index.js +127 -141
- package/build/src/cli/tenant-database-command-helper.js +154 -185
- package/build/src/cli/use-browser-cli.js +15 -20
- package/build/src/configuration-resolver.js +47 -54
- package/build/src/configuration-types.d.ts +5 -3
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +3 -54
- package/build/src/configuration.js +2240 -2547
- package/build/src/controller.js +363 -407
- package/build/src/current-configuration.js +9 -12
- package/build/src/current.js +70 -75
- package/build/src/database/annotations-async-hooks.js +16 -22
- package/build/src/database/annotations.js +12 -18
- package/build/src/database/drivers/base-column.js +155 -179
- package/build/src/database/drivers/base-columns-index.js +69 -78
- package/build/src/database/drivers/base-foreign-key.js +89 -101
- package/build/src/database/drivers/base-table.js +124 -149
- package/build/src/database/drivers/base.js +1306 -1489
- package/build/src/database/drivers/mssql/column.js +39 -50
- package/build/src/database/drivers/mssql/columns-index.js +2 -3
- package/build/src/database/drivers/mssql/connect-connection.js +11 -9
- package/build/src/database/drivers/mssql/foreign-key.js +8 -9
- package/build/src/database/drivers/mssql/index.js +507 -587
- package/build/src/database/drivers/mssql/options.js +68 -75
- package/build/src/database/drivers/mssql/query-parser.js +2 -3
- package/build/src/database/drivers/mssql/sql/alter-table.js +2 -2
- package/build/src/database/drivers/mssql/sql/create-database.js +24 -31
- package/build/src/database/drivers/mssql/sql/create-index.js +2 -2
- package/build/src/database/drivers/mssql/sql/create-table.js +2 -2
- package/build/src/database/drivers/mssql/sql/delete.js +14 -16
- package/build/src/database/drivers/mssql/sql/drop-database.js +24 -31
- package/build/src/database/drivers/mssql/sql/drop-table.js +2 -2
- package/build/src/database/drivers/mssql/sql/insert.js +2 -2
- package/build/src/database/drivers/mssql/sql/update.js +24 -28
- package/build/src/database/drivers/mssql/sql/upsert.js +18 -20
- package/build/src/database/drivers/mssql/structure-sql.js +102 -114
- package/build/src/database/drivers/mssql/table.js +81 -96
- package/build/src/database/drivers/mysql/column.js +75 -92
- package/build/src/database/drivers/mysql/columns-index.js +16 -19
- package/build/src/database/drivers/mysql/foreign-key.js +8 -9
- package/build/src/database/drivers/mysql/index.js +396 -457
- package/build/src/database/drivers/mysql/options.js +26 -30
- package/build/src/database/drivers/mysql/query-parser.js +2 -3
- package/build/src/database/drivers/mysql/query.js +26 -29
- package/build/src/database/drivers/mysql/sql/alter-table.js +2 -3
- package/build/src/database/drivers/mysql/sql/create-database.js +23 -28
- package/build/src/database/drivers/mysql/sql/create-index.js +2 -3
- package/build/src/database/drivers/mysql/sql/create-table.js +2 -3
- package/build/src/database/drivers/mysql/sql/delete.js +14 -17
- package/build/src/database/drivers/mysql/sql/drop-database.js +2 -3
- package/build/src/database/drivers/mysql/sql/drop-table.js +2 -3
- package/build/src/database/drivers/mysql/sql/insert.js +2 -3
- package/build/src/database/drivers/mysql/sql/update.js +24 -29
- package/build/src/database/drivers/mysql/sql/upsert.js +8 -10
- package/build/src/database/drivers/mysql/structure-sql.js +79 -88
- package/build/src/database/drivers/mysql/table.js +83 -98
- package/build/src/database/drivers/pgsql/column.js +56 -72
- package/build/src/database/drivers/pgsql/columns-index.js +2 -3
- package/build/src/database/drivers/pgsql/foreign-key.js +8 -9
- package/build/src/database/drivers/pgsql/index.js +377 -438
- package/build/src/database/drivers/pgsql/options.js +25 -28
- package/build/src/database/drivers/pgsql/query-parser.js +2 -3
- package/build/src/database/drivers/pgsql/sql/alter-table.js +2 -3
- package/build/src/database/drivers/pgsql/sql/create-database.js +19 -23
- package/build/src/database/drivers/pgsql/sql/create-index.js +2 -3
- package/build/src/database/drivers/pgsql/sql/create-table.js +2 -3
- package/build/src/database/drivers/pgsql/sql/delete.js +14 -17
- package/build/src/database/drivers/pgsql/sql/drop-database.js +2 -3
- package/build/src/database/drivers/pgsql/sql/drop-table.js +2 -3
- package/build/src/database/drivers/pgsql/sql/insert.js +2 -3
- package/build/src/database/drivers/pgsql/sql/update.js +24 -29
- package/build/src/database/drivers/pgsql/sql/upsert.js +9 -11
- package/build/src/database/drivers/pgsql/structure-sql.js +108 -120
- package/build/src/database/drivers/pgsql/table.js +60 -77
- package/build/src/database/drivers/sqlite/base.js +405 -478
- package/build/src/database/drivers/sqlite/column.js +54 -69
- package/build/src/database/drivers/sqlite/columns-index.js +22 -27
- package/build/src/database/drivers/sqlite/connection-sql-js.js +35 -42
- package/build/src/database/drivers/sqlite/foreign-key.js +18 -21
- package/build/src/database/drivers/sqlite/index.js +330 -373
- package/build/src/database/drivers/sqlite/index.native.js +55 -64
- package/build/src/database/drivers/sqlite/index.web.js +69 -87
- package/build/src/database/drivers/sqlite/options.js +25 -28
- package/build/src/database/drivers/sqlite/query-parser.js +2 -3
- package/build/src/database/drivers/sqlite/query.js +21 -24
- package/build/src/database/drivers/sqlite/query.native.js +20 -25
- package/build/src/database/drivers/sqlite/query.web.js +30 -37
- package/build/src/database/drivers/sqlite/sql/alter-table.js +159 -179
- package/build/src/database/drivers/sqlite/sql/create-index.js +2 -3
- package/build/src/database/drivers/sqlite/sql/create-table.js +2 -3
- package/build/src/database/drivers/sqlite/sql/delete.js +17 -22
- package/build/src/database/drivers/sqlite/sql/drop-table.js +2 -3
- package/build/src/database/drivers/sqlite/sql/insert.js +2 -3
- package/build/src/database/drivers/sqlite/sql/update.js +24 -29
- package/build/src/database/drivers/sqlite/sql/upsert.js +9 -11
- package/build/src/database/drivers/sqlite/structure-sql.js +49 -52
- package/build/src/database/drivers/sqlite/table-rebuilder.js +62 -75
- package/build/src/database/drivers/sqlite/table.js +102 -125
- package/build/src/database/drivers/structure-sql/utils.js +14 -17
- package/build/src/database/handler.js +9 -10
- package/build/src/database/initializer-from-require-context.js +76 -87
- package/build/src/database/migration/index.js +332 -395
- package/build/src/database/migrator/files-finder.js +40 -50
- package/build/src/database/migrator/types.js +2 -30
- package/build/src/database/migrator.js +454 -526
- package/build/src/database/pool/async-tracked-multi-connection.js +997 -1147
- package/build/src/database/pool/base-methods-forward.js +40 -43
- package/build/src/database/pool/base.js +298 -343
- package/build/src/database/pool/single-multi-use.js +93 -110
- package/build/src/database/query/alter-table-base.js +84 -99
- package/build/src/database/query/base.js +39 -46
- package/build/src/database/query/create-database-base.js +25 -30
- package/build/src/database/query/create-index-base.js +75 -94
- package/build/src/database/query/create-table-base.js +151 -193
- package/build/src/database/query/delete-base.js +14 -16
- package/build/src/database/query/drop-database-base.js +23 -28
- package/build/src/database/query/drop-table-base.js +42 -53
- package/build/src/database/query/from-base.js +30 -33
- package/build/src/database/query/from-plain.js +11 -13
- package/build/src/database/query/from-table.js +13 -15
- package/build/src/database/query/index.js +410 -472
- package/build/src/database/query/insert-base.js +143 -164
- package/build/src/database/query/join-base.js +35 -40
- package/build/src/database/query/join-object.js +128 -153
- package/build/src/database/query/join-plain.js +13 -15
- package/build/src/database/query/join-tracker.js +76 -90
- package/build/src/database/query/model-class-query.js +1134 -1370
- package/build/src/database/query/order-base.js +27 -30
- package/build/src/database/query/order-column.js +44 -53
- package/build/src/database/query/order-plain.js +20 -24
- package/build/src/database/query/preloader/belongs-to.js +210 -258
- package/build/src/database/query/preloader/ensure-model-class-initialized.js +8 -9
- package/build/src/database/query/preloader/has-many.js +240 -301
- package/build/src/database/query/preloader/has-one.js +91 -117
- package/build/src/database/query/preloader/selection.js +117 -129
- package/build/src/database/query/preloader.js +160 -185
- package/build/src/database/query/query-data.js +157 -201
- package/build/src/database/query/select-base.js +25 -27
- package/build/src/database/query/select-plain.js +13 -15
- package/build/src/database/query/select-table-and-column.js +21 -25
- package/build/src/database/query/update-base.js +35 -38
- package/build/src/database/query/upsert-base.js +93 -100
- package/build/src/database/query/where-base.js +32 -35
- package/build/src/database/query/where-combinator.js +25 -28
- package/build/src/database/query/where-hash.js +61 -68
- package/build/src/database/query/where-model-class-hash.js +414 -469
- package/build/src/database/query/where-not.js +18 -20
- package/build/src/database/query/where-plain.js +15 -17
- package/build/src/database/query/with-count.js +125 -159
- package/build/src/database/query-parser/base-query-parser.js +32 -37
- package/build/src/database/query-parser/from-parser.js +36 -45
- package/build/src/database/query-parser/group-parser.js +42 -50
- package/build/src/database/query-parser/joins-parser.js +28 -33
- package/build/src/database/query-parser/limit-parser.js +67 -70
- package/build/src/database/query-parser/options.js +75 -82
- package/build/src/database/query-parser/order-parser.js +36 -40
- package/build/src/database/query-parser/select-parser.js +49 -60
- package/build/src/database/query-parser/where-parser.js +36 -41
- package/build/src/database/record/acts-as-list.js +235 -273
- package/build/src/database/record/attachments/download.js +44 -45
- package/build/src/database/record/attachments/handle.js +141 -161
- package/build/src/database/record/attachments/normalize-input.js +128 -138
- package/build/src/database/record/attachments/storage-drivers/filesystem.js +77 -91
- package/build/src/database/record/attachments/storage-drivers/native.js +112 -121
- package/build/src/database/record/attachments/storage-drivers/s3.js +177 -208
- package/build/src/database/record/attachments/store.js +467 -539
- package/build/src/database/record/index.d.ts +109 -25
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +3502 -3898
- package/build/src/database/record/instance-relationships/base.js +234 -268
- package/build/src/database/record/instance-relationships/belongs-to.js +58 -73
- package/build/src/database/record/instance-relationships/has-many.js +225 -264
- package/build/src/database/record/instance-relationships/has-one.js +85 -105
- package/build/src/database/record/record-not-found-error.js +3 -2
- package/build/src/database/record/relationships/base.js +144 -166
- package/build/src/database/record/relationships/belongs-to.js +44 -51
- package/build/src/database/record/relationships/has-many.js +32 -40
- package/build/src/database/record/relationships/has-one.js +32 -40
- package/build/src/database/record/state-machine.js +156 -208
- package/build/src/database/record/user-module.js +32 -38
- package/build/src/database/record/validators/base.js +22 -24
- package/build/src/database/record/validators/format.js +36 -46
- package/build/src/database/record/validators/presence.js +18 -20
- package/build/src/database/record/validators/uniqueness.js +99 -117
- package/build/src/database/table-data/index.js +199 -231
- package/build/src/database/table-data/table-column.js +338 -382
- package/build/src/database/table-data/table-foreign-key.js +57 -66
- package/build/src/database/table-data/table-index.js +29 -36
- package/build/src/database/table-data/table-reference.js +10 -10
- package/build/src/database/use-database.js +32 -40
- package/build/src/environment-handlers/base.js +484 -544
- package/build/src/environment-handlers/browser.js +241 -294
- package/build/src/environment-handlers/node/cli/commands/background-jobs-main.js +16 -19
- package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.js +18 -21
- package/build/src/environment-handlers/node/cli/commands/background-jobs-worker.js +22 -29
- package/build/src/environment-handlers/node/cli/commands/beacon.js +16 -19
- package/build/src/environment-handlers/node/cli/commands/cli-command-context.js +14 -15
- package/build/src/environment-handlers/node/cli/commands/console.js +99 -120
- package/build/src/environment-handlers/node/cli/commands/db/schema/dump.js +34 -39
- package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +57 -63
- package/build/src/environment-handlers/node/cli/commands/db/seed.js +51 -63
- package/build/src/environment-handlers/node/cli/commands/destroy/migration.js +32 -40
- package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts +4 -2
- package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +326 -358
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +10 -10
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +729 -844
- package/build/src/environment-handlers/node/cli/commands/generate/migration.js +34 -38
- package/build/src/environment-handlers/node/cli/commands/generate/model.js +34 -38
- package/build/src/environment-handlers/node/cli/commands/init.js +56 -61
- package/build/src/environment-handlers/node/cli/commands/routes.js +51 -59
- package/build/src/environment-handlers/node/cli/commands/run-script.js +54 -68
- package/build/src/environment-handlers/node/cli/commands/runner.js +56 -74
- package/build/src/environment-handlers/node/cli/commands/server.js +93 -106
- package/build/src/environment-handlers/node/cli/commands/test.js +97 -113
- package/build/src/environment-handlers/node.js +753 -874
- package/build/src/error-logger.js +22 -21
- package/build/src/frontend-model-controller.js +2791 -3291
- package/build/src/frontend-model-resource/base-resource.d.ts +8 -3
- package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/base-resource.js +770 -865
- package/build/src/frontend-models/base.js +3136 -3593
- package/build/src/frontend-models/clear-pending-debounced-callback.js +7 -8
- package/build/src/frontend-models/event-hook-models.js +16 -21
- package/build/src/frontend-models/model-registry.js +9 -11
- package/build/src/frontend-models/outgoing-event-buffer.js +10 -17
- package/build/src/frontend-models/preloader.js +131 -149
- package/build/src/frontend-models/query.js +1557 -1855
- package/build/src/frontend-models/resource-config-validation.js +27 -37
- package/build/src/frontend-models/resource-definition.d.ts +6 -7
- package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
- package/build/src/frontend-models/resource-definition.js +237 -291
- package/build/src/frontend-models/transport-serialization.js +203 -266
- package/build/src/frontend-models/use-created-event.js +5 -7
- package/build/src/frontend-models/use-destroyed-event.js +80 -93
- package/build/src/frontend-models/use-model-class-event.js +79 -91
- package/build/src/frontend-models/use-updated-event.js +84 -97
- package/build/src/frontend-models/websocket-channel.js +381 -441
- package/build/src/frontend-models/websocket-publishers.js +142 -175
- package/build/src/http-client/header.js +13 -14
- package/build/src/http-client/index.js +116 -132
- package/build/src/http-client/request.js +71 -87
- package/build/src/http-client/response.js +122 -140
- package/build/src/http-client/websocket-client.js +15 -17
- package/build/src/http-server/client/index.js +409 -465
- package/build/src/http-server/client/params-to-object.js +124 -135
- package/build/src/http-server/client/request-buffer/form-data-part.js +111 -132
- package/build/src/http-server/client/request-buffer/header.js +15 -16
- package/build/src/http-server/client/request-buffer/index.js +446 -506
- package/build/src/http-server/client/request-parser.js +163 -186
- package/build/src/http-server/client/request-runner.js +226 -259
- package/build/src/http-server/client/request-timing.js +132 -151
- package/build/src/http-server/client/request.js +96 -108
- package/build/src/http-server/client/response.js +213 -235
- package/build/src/http-server/client/uploaded-file/memory-uploaded-file.js +25 -29
- package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.js +25 -29
- package/build/src/http-server/client/uploaded-file/uploaded-file.js +33 -33
- package/build/src/http-server/client/websocket-request.js +114 -137
- package/build/src/http-server/client/websocket-session.js +1452 -1657
- package/build/src/http-server/cookie.js +216 -236
- package/build/src/http-server/development-reloader.js +190 -221
- package/build/src/http-server/index.js +451 -525
- package/build/src/http-server/remote-address.js +38 -50
- package/build/src/http-server/server-client.js +181 -208
- package/build/src/http-server/server-lock.js +153 -167
- package/build/src/http-server/websocket-channel-subscribers.js +81 -93
- package/build/src/http-server/websocket-channel.js +104 -117
- package/build/src/http-server/websocket-connection.js +96 -104
- package/build/src/http-server/websocket-event-log-store.js +350 -404
- package/build/src/http-server/websocket-events-host.js +145 -164
- package/build/src/http-server/websocket-events.js +47 -47
- package/build/src/http-server/worker-handler/channel-subscriber-dispatch.js +13 -14
- package/build/src/http-server/worker-handler/in-process.js +123 -141
- package/build/src/http-server/worker-handler/index.js +313 -349
- package/build/src/http-server/worker-handler/worker-script.js +4 -5
- package/build/src/http-server/worker-handler/worker-thread.js +240 -269
- package/build/src/initializer.js +31 -36
- package/build/src/jobs/mail-delivery.js +13 -15
- package/build/src/logger/base-logger.js +24 -26
- package/build/src/logger/console-logger.js +21 -23
- package/build/src/logger/file-logger.js +29 -31
- package/build/src/logger/outputs/array-output.js +37 -42
- package/build/src/logger/outputs/console-output.js +20 -24
- package/build/src/logger/outputs/file-output.js +43 -48
- package/build/src/logger/outputs/stdout-output.js +39 -48
- package/build/src/logger.js +338 -394
- package/build/src/mailer/backends/smtp.js +134 -163
- package/build/src/mailer/base.js +211 -251
- package/build/src/mailer/delivery.js +56 -64
- package/build/src/mailer/index.js +4 -22
- package/build/src/mailer.js +4 -13
- package/build/src/plugins/sqljs-wasm-route-controller.js +42 -52
- package/build/src/plugins/sqljs-wasm-route.js +28 -38
- package/build/src/record-payload-values.js +25 -28
- package/build/src/routes/app-routes.js +12 -14
- package/build/src/routes/base-route.js +112 -130
- package/build/src/routes/basic-route.js +83 -102
- package/build/src/routes/built-in/debug/controller.js +10 -10
- package/build/src/routes/built-in/errors/controller.js +5 -5
- package/build/src/routes/get-route.js +50 -63
- package/build/src/routes/hooks/frontend-model-command-route-hook.js +66 -80
- package/build/src/routes/index.js +36 -43
- package/build/src/routes/namespace-route.js +38 -47
- package/build/src/routes/plugin-routes.js +107 -124
- package/build/src/routes/post-route.js +51 -62
- package/build/src/routes/resolver.js +422 -494
- package/build/src/routes/resource-route.js +124 -143
- package/build/src/routes/root-route.js +7 -8
- package/build/src/testing/base-expect.js +13 -14
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +329 -405
- package/build/src/testing/browser-test-app.js +23 -29
- package/build/src/testing/expect-to-change.js +41 -50
- package/build/src/testing/expect-utils.js +139 -184
- package/build/src/testing/expect.js +638 -731
- package/build/src/testing/request-client.js +70 -85
- package/build/src/testing/test-files-finder.js +285 -339
- package/build/src/testing/test-filter-parser.js +124 -155
- package/build/src/testing/test-runner.js +883 -1020
- package/build/src/testing/test-suite-splitter.js +114 -142
- package/build/src/testing/test.js +216 -256
- package/build/src/utils/backtrace-cleaner-node.js +62 -69
- package/build/src/utils/backtrace-cleaner.js +188 -216
- package/build/src/utils/ensure-error.js +7 -7
- package/build/src/utils/event-emitter.js +4 -6
- package/build/src/utils/file-exists.js +9 -10
- package/build/src/utils/format-value.js +67 -76
- package/build/src/utils/model-scope.js +27 -31
- package/build/src/utils/nest-callbacks.js +10 -13
- package/build/src/utils/plain-object.js +5 -6
- package/build/src/utils/ransack.js +448 -563
- package/build/src/utils/rest-args-error.js +5 -6
- package/build/src/utils/singularize-model-name.js +9 -11
- package/build/src/utils/split-sql-statements.js +68 -79
- package/build/src/utils/to-import-specifier.js +24 -30
- package/build/src/utils/with-tracked-stack-async-hooks.js +60 -74
- package/build/src/utils/with-tracked-stack.js +14 -18
- package/build/src/velocious-error.js +27 -30
- package/build/templates/configuration.js +61 -0
- package/build/templates/generate-migration.js +11 -0
- package/build/templates/generate-model.js +6 -0
- package/build/templates/routes.js +11 -0
- package/build/testing/base-expect.js +17 -0
- package/build/testing/browser-frontend-model-event-hook-scenarios.js +520 -0
- package/build/testing/browser-test-app.js +32 -0
- package/build/testing/expect-to-change.js +55 -0
- package/build/testing/expect-utils.js +269 -0
- package/build/testing/expect.js +763 -0
- package/build/testing/request-client.js +90 -0
- package/build/testing/test-files-finder.js +364 -0
- package/build/testing/test-filter-parser.js +198 -0
- package/build/testing/test-runner.js +1168 -0
- package/build/testing/test-suite-splitter.js +177 -0
- package/build/testing/test.js +370 -0
- package/build/utils/backtrace-cleaner-node.js +87 -0
- package/build/utils/backtrace-cleaner.js +266 -0
- package/build/utils/ensure-error.js +15 -0
- package/build/utils/event-emitter.js +8 -0
- package/build/utils/file-exists.js +18 -0
- package/build/utils/format-value.js +101 -0
- package/build/utils/model-scope.js +56 -0
- package/build/utils/nest-callbacks.js +22 -0
- package/build/utils/plain-object.js +14 -0
- package/build/utils/ransack.js +859 -0
- package/build/utils/rest-args-error.js +14 -0
- package/build/utils/singularize-model-name.js +18 -0
- package/build/utils/split-sql-statements.js +88 -0
- package/build/utils/to-import-specifier.js +53 -0
- package/build/utils/with-tracked-stack-async-hooks.js +103 -0
- package/build/utils/with-tracked-stack.js +38 -0
- package/build/velocious-error.js +34 -0
- package/package.json +3 -3
- package/src/configuration-types.js +1 -1
- package/src/database/record/index.js +174 -25
- package/src/environment-handlers/node/cli/commands/generate/base-models.js +50 -21
- package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +5 -5
- package/src/frontend-model-resource/base-resource.js +6 -2
- package/src/frontend-models/resource-definition.js +3 -3
- package/src/frontend-models/websocket-publishers.js +6 -6
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Runs query.
|
|
5
|
+
* @param {import("sql.js").Database} connection - Connection.
|
|
6
|
+
* @param {string} sql - SQL string.
|
|
7
|
+
* @returns {Promise<Record<string, ?>[]>} - Resolves with string value.
|
|
8
|
+
*/
|
|
9
|
+
export default async function query(connection, sql) {
|
|
10
|
+
const rows = []
|
|
11
|
+
let result
|
|
12
|
+
|
|
13
|
+
try {
|
|
14
|
+
result = connection.exec(sql)
|
|
15
|
+
} catch (error) {
|
|
16
|
+
let sqlInErrorMessage = `${sql}`
|
|
17
|
+
|
|
18
|
+
if (sqlInErrorMessage.length >= 4096) {
|
|
19
|
+
sqlInErrorMessage = `${sqlInErrorMessage.substring(0, 4096)}...`
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (error instanceof Error) {
|
|
23
|
+
error.message += `\n\n${sqlInErrorMessage}`
|
|
24
|
+
} else {
|
|
25
|
+
throw new Error(`An error occurred: ${error} [${typeof error}]\n\n${sqlInErrorMessage}`, {cause: error})
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
throw error
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (result[0]) {
|
|
32
|
+
const columns = result[0].columns
|
|
33
|
+
|
|
34
|
+
for (const rowValues of result[0].values) {
|
|
35
|
+
/**
|
|
36
|
+
* Row.
|
|
37
|
+
@type {Record<string, ?>} */
|
|
38
|
+
const row = {}
|
|
39
|
+
|
|
40
|
+
for (const columnIndex in columns) {
|
|
41
|
+
row[columns[columnIndex]] = rowValues[columnIndex]
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
rows.push(row)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return rows
|
|
49
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import AlterTableBase from "../../../query/alter-table-base.js"
|
|
4
|
+
import Logger from "../../../../logger.js"
|
|
5
|
+
import restArgsError from "../../../../utils/rest-args-error.js"
|
|
6
|
+
import TableData from "../../../table-data/index.js"
|
|
7
|
+
import TableForeignKey from "../../../table-data/table-foreign-key.js"
|
|
8
|
+
import TableIndex from "../../../table-data/table-index.js"
|
|
9
|
+
import TableRebuilder from "../table-rebuilder.js"
|
|
10
|
+
|
|
11
|
+
export default class VelociousDatabaseConnectionDriversSqliteSqlAlterTable extends AlterTableBase {
|
|
12
|
+
/**
|
|
13
|
+
* Runs constructor.
|
|
14
|
+
* @param {object} args - Options object.
|
|
15
|
+
* @param {import("../../base.js").default} args.driver - Database driver instance.
|
|
16
|
+
* @param {import("../../../table-data/index.js").default} args.tableData - Table data.
|
|
17
|
+
*/
|
|
18
|
+
constructor({driver, tableData, ...restArgs}) {
|
|
19
|
+
restArgsError(restArgs)
|
|
20
|
+
|
|
21
|
+
if (!(tableData instanceof TableData)) throw new Error("Invalid table data was given")
|
|
22
|
+
|
|
23
|
+
super({driver, tableData})
|
|
24
|
+
this.logger = new Logger(this)
|
|
25
|
+
this.tableData = tableData
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Runs to sqls.
|
|
30
|
+
* @returns {Promise<string[]>} - Resolves with SQL statements.
|
|
31
|
+
*/
|
|
32
|
+
async toSQLs() {
|
|
33
|
+
const driver = this.getDriver()
|
|
34
|
+
const {tableData: alterTableData} = this
|
|
35
|
+
const tableName = alterTableData.getName()
|
|
36
|
+
const table = await driver.getTableByName(tableName)
|
|
37
|
+
|
|
38
|
+
if (!table) throw new Error(`Table ${tableName} does not exist`)
|
|
39
|
+
|
|
40
|
+
const currentTableData = await table.getTableData()
|
|
41
|
+
const {targetTableData, columnPairs} = this._buildTargetSchema(currentTableData, alterTableData)
|
|
42
|
+
|
|
43
|
+
const rebuilder = new TableRebuilder({
|
|
44
|
+
columnPairs,
|
|
45
|
+
driver,
|
|
46
|
+
originalTableName: tableName,
|
|
47
|
+
targetTableData
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
const rebuildSQLs = await rebuilder.toSQLs()
|
|
51
|
+
const sqls = []
|
|
52
|
+
|
|
53
|
+
// PRAGMA foreign_keys can only be toggled outside an active transaction; when the
|
|
54
|
+
// caller is already inside one these become no-ops (matching prior behavior). Outside
|
|
55
|
+
// a transaction they protect the rebuild from cross-table FK enforcement during the
|
|
56
|
+
// DROP/RENAME swap. Capture the prior state so we restore it instead of unconditionally
|
|
57
|
+
// forcing ON — callers that deliberately disabled FK enforcement (e.g. bulk data fixes)
|
|
58
|
+
// shouldn't be silently flipped back on by a migration.
|
|
59
|
+
const priorState = await driver.query("PRAGMA foreign_keys")
|
|
60
|
+
const wasEnabled = priorState[0]?.foreign_keys == 1
|
|
61
|
+
|
|
62
|
+
sqls.push("PRAGMA foreign_keys = OFF")
|
|
63
|
+
|
|
64
|
+
for (const sql of rebuildSQLs) sqls.push(sql)
|
|
65
|
+
|
|
66
|
+
sqls.push(`PRAGMA foreign_keys = ${wasEnabled ? "ON" : "OFF"}`)
|
|
67
|
+
|
|
68
|
+
return sqls
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Merges the current schema with the alter request to produce the desired final schema
|
|
73
|
+
* and the column copy plan.
|
|
74
|
+
* @param {TableData} currentTableData - Current schema as introspected from the database.
|
|
75
|
+
* @param {TableData} alterTableData - Alter request: new columns (`isNewColumn`), renames (`newName`), drops (`dropColumn`), modifies, and new foreign keys.
|
|
76
|
+
* @returns {{targetTableData: TableData, columnPairs: Array<[string, string]>}} - The merged target schema and the [oldName, newName] pairs for INSERT...SELECT.
|
|
77
|
+
*/
|
|
78
|
+
_buildTargetSchema(currentTableData, alterTableData) {
|
|
79
|
+
const targetTableData = new TableData(currentTableData.getName())
|
|
80
|
+
/**
|
|
81
|
+
* Column pairs.
|
|
82
|
+
@type {Array<[string, string]>} */
|
|
83
|
+
const columnPairs = []
|
|
84
|
+
const alterColumns = alterTableData.getColumns()
|
|
85
|
+
const existingNames = new Set(currentTableData.getColumns().map((column) => column.getName()))
|
|
86
|
+
/**
|
|
87
|
+
* Column renames.
|
|
88
|
+
@type {Map<string, string>} */
|
|
89
|
+
const columnRenames = new Map()
|
|
90
|
+
|
|
91
|
+
for (const alterColumn of alterColumns) {
|
|
92
|
+
if (alterColumn.isNewColumn()) continue
|
|
93
|
+
|
|
94
|
+
const newName = alterColumn.getNewName()
|
|
95
|
+
|
|
96
|
+
if (newName) columnRenames.set(alterColumn.getName(), newName)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
for (const currentColumn of currentTableData.getColumns()) {
|
|
100
|
+
const alterColumn = alterColumns.find((column) => column.getName() == currentColumn.getName() && !column.isNewColumn())
|
|
101
|
+
|
|
102
|
+
if (alterColumn?.getDropColumn()) continue
|
|
103
|
+
|
|
104
|
+
let targetColumn
|
|
105
|
+
|
|
106
|
+
if (alterColumn) {
|
|
107
|
+
// The alter request supplies a partial column spec (e.g. just a rename or a type change);
|
|
108
|
+
// inherit unset properties from the current column so we don't lose existing definitions.
|
|
109
|
+
alterColumn.setAutoIncrement(alterColumn.getAutoIncrement() || currentColumn.getAutoIncrement())
|
|
110
|
+
if (alterColumn.getDefault() === undefined) alterColumn.setDefault(currentColumn.getDefault())
|
|
111
|
+
if (!alterColumn.getIndex()) alterColumn.setIndex(currentColumn.getIndex())
|
|
112
|
+
if (!alterColumn.getForeignKey()) alterColumn.setForeignKey(currentColumn.getForeignKey())
|
|
113
|
+
if (alterColumn.getMaxLength() === undefined) alterColumn.setMaxLength(currentColumn.getMaxLength())
|
|
114
|
+
alterColumn.setPrimaryKey(alterColumn.getPrimaryKey() || currentColumn.getPrimaryKey())
|
|
115
|
+
if (!alterColumn.getType()) alterColumn.setType(currentColumn.getType())
|
|
116
|
+
|
|
117
|
+
targetColumn = alterColumn
|
|
118
|
+
} else {
|
|
119
|
+
targetColumn = currentColumn
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
targetTableData.addColumn(targetColumn)
|
|
123
|
+
columnPairs.push([currentColumn.getName(), targetColumn.getNewName() || targetColumn.getName()])
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
for (const alterColumn of alterColumns) {
|
|
127
|
+
if (!alterColumn.isNewColumn()) continue
|
|
128
|
+
if (existingNames.has(alterColumn.getName())) continue
|
|
129
|
+
|
|
130
|
+
targetTableData.addColumn(alterColumn)
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const seenForeignKeyNames = new Set()
|
|
134
|
+
|
|
135
|
+
for (const currentForeignKey of currentTableData.getForeignKeys()) {
|
|
136
|
+
const alterForeignKey = alterTableData.getForeignKeys().find((foreignKey) => foreignKey.getName() == currentForeignKey.getName())
|
|
137
|
+
const finalForeignKey = this._renameForeignKeyColumn(alterForeignKey || currentForeignKey, columnRenames)
|
|
138
|
+
|
|
139
|
+
seenForeignKeyNames.add(finalForeignKey.getName())
|
|
140
|
+
targetTableData.addForeignKey(finalForeignKey)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
for (const alterForeignKey of alterTableData.getForeignKeys()) {
|
|
144
|
+
if (seenForeignKeyNames.has(alterForeignKey.getName())) continue
|
|
145
|
+
|
|
146
|
+
targetTableData.addForeignKey(this._renameForeignKeyColumn(alterForeignKey, columnRenames))
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
for (const currentIndex of currentTableData.getIndexes()) {
|
|
150
|
+
const renamedColumns = currentIndex.getColumns().map((columnName) => {
|
|
151
|
+
if (typeof columnName != "string") return columnName
|
|
152
|
+
|
|
153
|
+
return columnRenames.get(columnName) || columnName
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
targetTableData.addIndex(new TableIndex(renamedColumns, {
|
|
157
|
+
name: currentIndex.getName(),
|
|
158
|
+
unique: currentIndex.getUnique()
|
|
159
|
+
}))
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return {targetTableData, columnPairs}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Returns the foreign key with its column name updated when the column was renamed in the
|
|
167
|
+
* alter request. SQLite re-creates the constraint inside the rebuilt CREATE TABLE, so a
|
|
168
|
+
* stale column name there would reference a column that no longer exists.
|
|
169
|
+
* @param {TableForeignKey} foreignKey - Foreign key to evaluate.
|
|
170
|
+
* @param {Map<string, string>} columnRenames - Map of old → new column names from the alter request.
|
|
171
|
+
* @returns {TableForeignKey} - The original foreign key, or a fresh instance with the renamed column.
|
|
172
|
+
*/
|
|
173
|
+
_renameForeignKeyColumn(foreignKey, columnRenames) {
|
|
174
|
+
const renamed = columnRenames.get(foreignKey.getColumnName())
|
|
175
|
+
|
|
176
|
+
if (!renamed) return foreignKey
|
|
177
|
+
|
|
178
|
+
return new TableForeignKey({
|
|
179
|
+
columnName: renamed,
|
|
180
|
+
isNewForeignKey: foreignKey.getIsNewForeignKey(),
|
|
181
|
+
name: foreignKey.getName(),
|
|
182
|
+
referencedColumnName: foreignKey.getReferencedColumnName(),
|
|
183
|
+
referencedTableName: foreignKey.getReferencedTableName(),
|
|
184
|
+
tableName: foreignKey.getTableName()
|
|
185
|
+
})
|
|
186
|
+
}
|
|
187
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import DeleteBase from "../../../query/delete-base.js"
|
|
4
|
+
|
|
5
|
+
export default class VelociousDatabaseConnectionDriversMysqlSqlDelete extends DeleteBase {
|
|
6
|
+
toSql() {
|
|
7
|
+
let sql = `DELETE FROM ${this.getOptions().quoteTableName(this.tableName)}`
|
|
8
|
+
|
|
9
|
+
if (this.conditions && Object.keys(this.conditions).length > 0) {
|
|
10
|
+
sql += " WHERE "
|
|
11
|
+
|
|
12
|
+
let count = 0
|
|
13
|
+
|
|
14
|
+
for (let columnName in this.conditions) {
|
|
15
|
+
if (count > 0) sql += " AND "
|
|
16
|
+
|
|
17
|
+
sql += this.getOptions().quoteColumnName(columnName)
|
|
18
|
+
sql += " = "
|
|
19
|
+
sql += this.getOptions().quote(this.conditions[columnName])
|
|
20
|
+
count++
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return sql
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import UpdateBase from "../../../query/update-base.js"
|
|
4
|
+
|
|
5
|
+
export default class VelociousDatabaseConnectionDriversMysqlSqlUpdate extends UpdateBase {
|
|
6
|
+
toSql() {
|
|
7
|
+
let sql = `UPDATE ${this.getOptions().quoteTableName(this.tableName)} SET `
|
|
8
|
+
let count = 0
|
|
9
|
+
|
|
10
|
+
for (let columnName in this.data) {
|
|
11
|
+
if (count > 0) sql += ", "
|
|
12
|
+
|
|
13
|
+
sql += this.getOptions().quoteColumnName(columnName)
|
|
14
|
+
sql += " = "
|
|
15
|
+
sql += this.formatValue(this.data[columnName])
|
|
16
|
+
count++
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
sql += " WHERE "
|
|
20
|
+
count = 0
|
|
21
|
+
|
|
22
|
+
for (let columnName in this.conditions) {
|
|
23
|
+
if (count > 0) sql += " AND "
|
|
24
|
+
|
|
25
|
+
sql += this.getOptions().quoteColumnName(columnName)
|
|
26
|
+
sql += " = "
|
|
27
|
+
sql += this.formatValue(this.conditions[columnName])
|
|
28
|
+
count++
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return sql
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import UpsertBase from "../../../query/upsert-base.js"
|
|
4
|
+
|
|
5
|
+
export default class VelociousDatabaseConnectionDriversSqliteSqlUpsert extends UpsertBase {
|
|
6
|
+
toSql() {
|
|
7
|
+
const conflictSql = this.conflictColumns.map((columnName) => this.quotedColumn(columnName)).join(", ")
|
|
8
|
+
const updateSql = this.updateColumns.map((columnName) => {
|
|
9
|
+
return `${this.quotedColumn(columnName)} = excluded.${this.quotedColumn(columnName)}`
|
|
10
|
+
}).join(", ")
|
|
11
|
+
|
|
12
|
+
return `INSERT INTO ${this.quotedTableName()} (${this.quotedInsertColumnsSql()}) VALUES (${this.quotedInsertValuesSql()}) ON CONFLICT (${conflictSql}) DO UPDATE SET ${updateSql}`
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import {normalizeSqlStatement} from "../structure-sql/utils.js"
|
|
4
|
+
|
|
5
|
+
export default class VelociousDatabaseDriversSqliteStructureSql {
|
|
6
|
+
/**
|
|
7
|
+
* Runs constructor.
|
|
8
|
+
* @param {object} args - Options object.
|
|
9
|
+
* @param {import("../base.js").default} args.driver - Database driver instance.
|
|
10
|
+
*/
|
|
11
|
+
constructor({driver}) {
|
|
12
|
+
this.driver = driver
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Runs to sql.
|
|
17
|
+
* @returns {Promise<string | null>} - Resolves with SQL string.
|
|
18
|
+
*/
|
|
19
|
+
async toSql() {
|
|
20
|
+
const {driver} = this
|
|
21
|
+
const rows = await driver.query("SELECT type, sql, name FROM sqlite_master WHERE sql IS NOT NULL AND name NOT LIKE 'sqlite_%' ORDER BY name")
|
|
22
|
+
const tables = []
|
|
23
|
+
const views = []
|
|
24
|
+
const indexes = []
|
|
25
|
+
const triggers = []
|
|
26
|
+
const others = []
|
|
27
|
+
|
|
28
|
+
for (const row of rows) {
|
|
29
|
+
const rawSql = row.sql || row.SQL
|
|
30
|
+
const rawType = row.type || row.TYPE
|
|
31
|
+
const statement = rawSql ? normalizeSqlStatement(String(rawSql)) : ""
|
|
32
|
+
|
|
33
|
+
if (!statement) continue
|
|
34
|
+
|
|
35
|
+
const normalizedType = rawType ? String(rawType).toLowerCase() : ""
|
|
36
|
+
|
|
37
|
+
if (normalizedType === "table") {
|
|
38
|
+
tables.push(statement)
|
|
39
|
+
} else if (normalizedType === "view") {
|
|
40
|
+
views.push(statement)
|
|
41
|
+
} else if (normalizedType === "index") {
|
|
42
|
+
indexes.push(statement)
|
|
43
|
+
} else if (normalizedType === "trigger") {
|
|
44
|
+
triggers.push(statement)
|
|
45
|
+
} else {
|
|
46
|
+
others.push(statement)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const statements = [...tables, ...views, ...indexes, ...triggers, ...others]
|
|
51
|
+
|
|
52
|
+
if (statements.length == 0) return null
|
|
53
|
+
|
|
54
|
+
return `${statements.join("\n\n")}\n`
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import CreateIndexBase from "../../query/create-index-base.js"
|
|
4
|
+
import restArgsError from "../../../utils/rest-args-error.js"
|
|
5
|
+
import TableData from "../../table-data/index.js"
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Emits the SQL sequence for SQLite's "rebuild" approach to schema changes.
|
|
9
|
+
*
|
|
10
|
+
* SQLite cannot add/drop foreign-key constraints, drop columns on older
|
|
11
|
+
* versions, change column types, or add CHECK constraints via ALTER TABLE.
|
|
12
|
+
* The standard workaround (https://sqlite.org/lang_altertable.html) is to
|
|
13
|
+
* create a new table with the desired schema, copy rows over, drop the
|
|
14
|
+
* original, and rename the replacement.
|
|
15
|
+
*
|
|
16
|
+
* Caller passes the desired final schema; this class handles the mechanical
|
|
17
|
+
* sequence (CREATE temp / INSERT...SELECT / DROP / RENAME / recreate
|
|
18
|
+
* indexes). Caller is responsible for any FK toggling or transaction setup
|
|
19
|
+
* around the returned SQL — `PRAGMA foreign_keys` is connection-scoped and
|
|
20
|
+
* cannot be flipped inside a transaction, so wrapping policy is left to the
|
|
21
|
+
* caller (see `sql/alter-table.js`).
|
|
22
|
+
*/
|
|
23
|
+
export default class VelociousDatabaseDriversSqliteTableRebuilder {
|
|
24
|
+
/**
|
|
25
|
+
* Runs constructor.
|
|
26
|
+
* @param {object} args - Options object.
|
|
27
|
+
* @param {import("../base.js").default} args.driver - Database driver instance.
|
|
28
|
+
* @param {string} args.originalTableName - Name of the existing table to rebuild.
|
|
29
|
+
* @param {TableData} args.targetTableData - Desired final schema (columns + foreign keys + indexes). The instance's name is overwritten internally during emission.
|
|
30
|
+
* @param {Array<[string, string]>} args.columnPairs - Pairs of [oldColumnName, newColumnName] describing how rows from the original table should populate the rebuilt table.
|
|
31
|
+
*/
|
|
32
|
+
constructor({driver, originalTableName, targetTableData, columnPairs, ...restArgs}) {
|
|
33
|
+
restArgsError(restArgs)
|
|
34
|
+
|
|
35
|
+
if (!(targetTableData instanceof TableData)) throw new Error("Invalid target table data was given")
|
|
36
|
+
|
|
37
|
+
this.driver = driver
|
|
38
|
+
this.originalTableName = originalTableName
|
|
39
|
+
this.targetTableData = targetTableData
|
|
40
|
+
this.columnPairs = columnPairs
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Runs to sqls.
|
|
45
|
+
* @returns {Promise<string[]>} - Resolves with SQL statements to execute in order.
|
|
46
|
+
*/
|
|
47
|
+
async toSQLs() {
|
|
48
|
+
const driver = this.driver
|
|
49
|
+
const options = driver.options()
|
|
50
|
+
const originalTableName = this.originalTableName
|
|
51
|
+
const tempTableName = `${originalTableName}_velocious_rebuild`
|
|
52
|
+
const targetTableData = this.targetTableData
|
|
53
|
+
const previousTargetName = targetTableData.getName()
|
|
54
|
+
|
|
55
|
+
targetTableData.setName(tempTableName)
|
|
56
|
+
|
|
57
|
+
let createTableSQLs
|
|
58
|
+
|
|
59
|
+
try {
|
|
60
|
+
createTableSQLs = await driver.createTableSql(targetTableData)
|
|
61
|
+
} finally {
|
|
62
|
+
targetTableData.setName(previousTargetName)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const newColumnsSQL = this.columnPairs.map(([, newName]) => options.quoteColumnName(newName)).join(", ")
|
|
66
|
+
const oldColumnsSQL = this.columnPairs.map(([oldName]) => options.quoteColumnName(oldName)).join(", ")
|
|
67
|
+
|
|
68
|
+
const sqls = []
|
|
69
|
+
|
|
70
|
+
for (const sql of createTableSQLs) sqls.push(sql)
|
|
71
|
+
|
|
72
|
+
if (this.columnPairs.length > 0) {
|
|
73
|
+
sqls.push(
|
|
74
|
+
`INSERT INTO ${options.quoteTableName(tempTableName)} (${newColumnsSQL}) ` +
|
|
75
|
+
`SELECT ${oldColumnsSQL} FROM ${options.quoteTableName(originalTableName)}`
|
|
76
|
+
)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
sqls.push(`DROP TABLE ${options.quoteTableName(originalTableName)}`)
|
|
80
|
+
sqls.push(`ALTER TABLE ${options.quoteTableName(tempTableName)} RENAME TO ${options.quoteTableName(originalTableName)}`)
|
|
81
|
+
|
|
82
|
+
for (const tableDataIndex of targetTableData.getIndexes()) {
|
|
83
|
+
const createIndexSQLs = await new CreateIndexBase({
|
|
84
|
+
columns: tableDataIndex.getColumns(),
|
|
85
|
+
driver,
|
|
86
|
+
name: tableDataIndex.getName(),
|
|
87
|
+
tableName: originalTableName,
|
|
88
|
+
unique: tableDataIndex.getUnique()
|
|
89
|
+
}).toSQLs()
|
|
90
|
+
|
|
91
|
+
for (const sql of createIndexSQLs) sqls.push(sql)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return sqls
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import BaseTable from "../base-table.js"
|
|
4
|
+
import Column from "./column.js"
|
|
5
|
+
import ColumnsIndex from "./columns-index.js"
|
|
6
|
+
import ForeignKey from "./foreign-key.js"
|
|
7
|
+
|
|
8
|
+
export default class VelociousDatabaseDriversSqliteTable extends BaseTable {
|
|
9
|
+
/**
|
|
10
|
+
* Runs constructor.
|
|
11
|
+
* @param {object} args - Options object.
|
|
12
|
+
* @param {import("../base.js").default} args.driver - Database driver instance.
|
|
13
|
+
* @param {Record<string, string | number | null>} args.row - Row data.
|
|
14
|
+
*/
|
|
15
|
+
constructor({driver, row}) {
|
|
16
|
+
super()
|
|
17
|
+
this.driver = driver
|
|
18
|
+
this.row = row
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Runs get columns.
|
|
23
|
+
* @returns {Promise<Array<import("../base-column.js").default>>} - Resolves with the columns.
|
|
24
|
+
*/
|
|
25
|
+
async getColumns() {
|
|
26
|
+
return await this.getDriver()._cachedTableSchemaMetadata(this.getName(), "columns", async () => {
|
|
27
|
+
const result = await this.driver.query(`PRAGMA table_info('${this.getName()}')`)
|
|
28
|
+
const columns = []
|
|
29
|
+
|
|
30
|
+
for (const columnData of result) {
|
|
31
|
+
const column = new Column({column: columnData, driver: this.driver, table: this})
|
|
32
|
+
|
|
33
|
+
columns.push(column)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return columns
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async getForeignKeys() {
|
|
41
|
+
return await this.getDriver()._cachedTableSchemaMetadata(this.getName(), "foreignKeys", async () => {
|
|
42
|
+
const foreignKeysData = await this.driver.query(`SELECT * FROM pragma_foreign_key_list(${this.driver.quote(this.getName())})`)
|
|
43
|
+
const foreignKeys = []
|
|
44
|
+
|
|
45
|
+
for (const foreignKeyData of foreignKeysData) {
|
|
46
|
+
const foreignKey = new ForeignKey(foreignKeyData, {tableName: this.getName()})
|
|
47
|
+
|
|
48
|
+
foreignKeys.push(foreignKey)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return foreignKeys
|
|
52
|
+
})
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async getIndexes() {
|
|
56
|
+
return await this.getDriver()._cachedTableSchemaMetadata(this.getName(), "indexes", async () => {
|
|
57
|
+
const rows = await this.getDriver().query(`PRAGMA index_list(${this.getOptions().quoteTableName(this.getName())})`)
|
|
58
|
+
const indexes = []
|
|
59
|
+
|
|
60
|
+
for (const row of rows) {
|
|
61
|
+
const indexName = row.name
|
|
62
|
+
|
|
63
|
+
if (typeof indexName == "string" && indexName.startsWith("sqlite_autoindex_")) {
|
|
64
|
+
// Skip SQLite internal auto indexes (e.g. primary key / unique constraints)
|
|
65
|
+
continue
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const columnsIndex = new ColumnsIndex(this, row)
|
|
69
|
+
const indexMasterData = await this.getDriver().query(`SELECT * FROM sqlite_master WHERE type = 'index' AND name = ${this.getOptions().quote(columnsIndex.getName())}`)
|
|
70
|
+
const sql = indexMasterData[0]?.sql
|
|
71
|
+
|
|
72
|
+
if (!sql) throw new Error(`Could not find SQL for index ${columnsIndex.getName()}`)
|
|
73
|
+
|
|
74
|
+
const indexData = /**
|
|
75
|
+
* Narrows the runtime value to the documented type.
|
|
76
|
+
@type {typeof columnsIndex.data & {columnNames?: string[]}} */ (columnsIndex.data)
|
|
77
|
+
|
|
78
|
+
indexData.columnNames = this._parseColumnsFromSQL(String(sql))
|
|
79
|
+
|
|
80
|
+
indexes.push(columnsIndex)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return indexes
|
|
84
|
+
})
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Runs parse columns from sql.
|
|
89
|
+
* @param {string} sql - SQL string.
|
|
90
|
+
* @returns {string[]} - SQL statements.
|
|
91
|
+
*/
|
|
92
|
+
_parseColumnsFromSQL(sql) {
|
|
93
|
+
if (!sql) throw new Error(`Invalid SQL given (${typeof sql}): ${sql}`)
|
|
94
|
+
|
|
95
|
+
const columnsSQLMatch = sql.match(/\((.+?)\)/)
|
|
96
|
+
|
|
97
|
+
if (!columnsSQLMatch) {
|
|
98
|
+
throw new Error(`Could not match columns from SQL: ${sql}`)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const columnsSQL = columnsSQLMatch[1].split(",")
|
|
102
|
+
const columnNames = []
|
|
103
|
+
|
|
104
|
+
for (const column of columnsSQL) {
|
|
105
|
+
const matchTicks = column.match(/`(.+)`/)
|
|
106
|
+
const matchQuotes = column.match(/"(.+)"/)
|
|
107
|
+
|
|
108
|
+
if (matchTicks) {
|
|
109
|
+
columnNames.push(matchTicks[1])
|
|
110
|
+
} else if (matchQuotes) {
|
|
111
|
+
columnNames.push(matchQuotes[1])
|
|
112
|
+
} else{
|
|
113
|
+
throw new Error(`Couldn't parse column part: ${column}`)
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return columnNames
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Runs get name.
|
|
122
|
+
* @returns {string} - The table name.
|
|
123
|
+
*/
|
|
124
|
+
getName() {
|
|
125
|
+
if (!this.row.name) {
|
|
126
|
+
throw new Error("No name given for SQLite table")
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return String(this.row.name)
|
|
130
|
+
}
|
|
131
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Runs the normalizeSqlStatement helper.
|
|
5
|
+
* @param {string} statement - Statement.
|
|
6
|
+
* @returns {string} - SQL string.
|
|
7
|
+
*/
|
|
8
|
+
export function normalizeSqlStatement(statement) {
|
|
9
|
+
const trimmed = statement.trim()
|
|
10
|
+
|
|
11
|
+
if (!trimmed) return ""
|
|
12
|
+
|
|
13
|
+
if (trimmed.endsWith(";")) return trimmed
|
|
14
|
+
|
|
15
|
+
return `${trimmed};`
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Runs the normalizeCreateStatement helper.
|
|
20
|
+
* @param {object} args - Options object.
|
|
21
|
+
* @param {import("../base.js").default} args.db - Database connection.
|
|
22
|
+
* @param {string} args.objectName - Object name.
|
|
23
|
+
* @param {string} args.statement - Statement.
|
|
24
|
+
* @param {string} args.type - Type identifier.
|
|
25
|
+
* @returns {string} - The create statement.
|
|
26
|
+
*/
|
|
27
|
+
export function normalizeCreateStatement({db, objectName, statement, type}) {
|
|
28
|
+
const trimmed = statement.trim()
|
|
29
|
+
|
|
30
|
+
if (!trimmed) return trimmed
|
|
31
|
+
|
|
32
|
+
if (trimmed.toLowerCase().startsWith("create ")) return trimmed
|
|
33
|
+
|
|
34
|
+
return `CREATE ${type} ${db.quoteTable(objectName)} AS ${trimmed}`
|
|
35
|
+
}
|