@simplysm/sd-cli 7.3.4 → 10.0.21
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/.eslintrc.cjs +18 -0
- package/dist/SdLinter.d.ts +5 -0
- package/dist/SdLinter.js.map +1 -0
- package/dist/SdLinter.mjs +37 -0
- package/dist/SdTsIncrementalBuilder.d.ts +16 -0
- package/dist/SdTsIncrementalBuilder.js.map +1 -0
- package/dist/SdTsIncrementalBuilder.mjs +54 -0
- package/dist/build-cluster.js.map +1 -0
- package/dist/build-cluster.mjs +124 -0
- package/dist/builders/SdCliClientBuilder.d.ts +13 -0
- package/dist/builders/SdCliClientBuilder.js.map +1 -0
- package/dist/builders/SdCliClientBuilder.mjs +167 -0
- package/dist/builders/SdCliJsLibLinter.d.ts +14 -0
- package/dist/builders/SdCliJsLibLinter.js.map +1 -0
- package/dist/builders/SdCliJsLibLinter.mjs +60 -0
- package/dist/builders/SdCliServerBuilder.d.ts +14 -0
- package/dist/builders/SdCliServerBuilder.js.map +1 -0
- package/dist/builders/SdCliServerBuilder.mjs +171 -0
- package/dist/builders/SdCliTsLibBuilder.d.ts +13 -0
- package/dist/builders/SdCliTsLibBuilder.js.map +1 -0
- package/dist/builders/SdCliTsLibBuilder.mjs +75 -0
- package/dist/commons.d.ts +20 -110
- package/dist/commons.js.map +1 -0
- package/dist/commons.mjs +1 -1
- package/dist/entry/SdCliProject.d.ts +29 -0
- package/dist/entry/SdCliProject.js.map +1 -0
- package/dist/entry/SdCliProject.mjs +353 -0
- package/dist/sd-cli.js.map +1 -0
- package/dist/sd-cli.mjs +119 -0
- package/dist/sd-core-common/src/decorators/NotifyPropertyChange.d.ts +20 -0
- package/dist/sd-core-common/src/decorators/NotifyPropertyChange.js.map +1 -0
- package/dist/sd-core-common/src/decorators/NotifyPropertyChange.mjs +12 -0
- package/dist/sd-core-common/src/decorators/PropertyGetSetDecoratorBase.d.ts +43 -0
- package/dist/sd-core-common/src/decorators/PropertyGetSetDecoratorBase.js.map +1 -0
- package/dist/sd-core-common/src/decorators/PropertyGetSetDecoratorBase.mjs +54 -0
- package/dist/sd-core-common/src/decorators/PropertyValidate.d.ts +16 -0
- package/dist/sd-core-common/src/decorators/PropertyValidate.js.map +1 -0
- package/dist/sd-core-common/src/decorators/PropertyValidate.mjs +26 -0
- package/dist/sd-core-common/src/decorators/decorator-return-types.d.ts +14 -0
- package/dist/sd-core-common/src/decorators/decorator-return-types.js.map +1 -0
- package/dist/sd-core-common/src/decorators/decorator-return-types.mjs +2 -0
- package/dist/sd-core-common/src/errors/ArgumentError.d.ts +10 -0
- package/dist/sd-core-common/src/errors/ArgumentError.js.map +1 -0
- package/dist/sd-core-common/src/errors/ArgumentError.mjs +13 -0
- package/dist/sd-core-common/src/errors/NeverEntryError.d.ts +10 -0
- package/dist/sd-core-common/src/errors/NeverEntryError.js.map +1 -0
- package/dist/sd-core-common/src/errors/NeverEntryError.mjs +13 -0
- package/dist/sd-core-common/src/errors/NotImplementError.d.ts +10 -0
- package/dist/sd-core-common/src/errors/NotImplementError.js.map +1 -0
- package/dist/sd-core-common/src/errors/NotImplementError.mjs +13 -0
- package/dist/sd-core-common/src/errors/SdError.d.ts +23 -0
- package/dist/sd-core-common/src/errors/SdError.js.map +1 -0
- package/dist/sd-core-common/src/errors/SdError.mjs +40 -0
- package/dist/sd-core-common/src/errors/TimeoutError.d.ts +11 -0
- package/dist/sd-core-common/src/errors/TimeoutError.js.map +1 -0
- package/dist/sd-core-common/src/errors/TimeoutError.mjs +16 -0
- package/dist/sd-core-common/src/extensions/ArrayExtension.d.ts +147 -0
- package/dist/sd-core-common/src/extensions/ArrayExtension.js.map +1 -0
- package/dist/sd-core-common/src/extensions/ArrayExtension.mjs +448 -0
- package/dist/sd-core-common/src/extensions/MapExtension.d.ts +4 -0
- package/dist/sd-core-common/src/extensions/MapExtension.js.map +1 -0
- package/dist/sd-core-common/src/extensions/MapExtension.mjs +15 -0
- package/dist/sd-core-common/src/extensions/SetExtension.d.ts +3 -0
- package/dist/sd-core-common/src/extensions/SetExtension.js.map +1 -0
- package/dist/sd-core-common/src/extensions/SetExtension.mjs +10 -0
- package/dist/sd-core-common/src/index.d.ts +32 -0
- package/dist/sd-core-common/src/index.js.map +1 -0
- package/dist/sd-core-common/src/index.mjs +33 -0
- package/dist/sd-core-common/src/types/DateOnly.d.ts +135 -0
- package/dist/sd-core-common/src/types/DateOnly.js.map +1 -0
- package/dist/sd-core-common/src/types/DateOnly.mjs +220 -0
- package/dist/sd-core-common/src/types/DateTime.d.ts +42 -0
- package/dist/sd-core-common/src/types/DateTime.js.map +1 -0
- package/dist/sd-core-common/src/types/DateTime.mjs +156 -0
- package/dist/sd-core-common/src/types/DeepPartial.d.ts +3 -0
- package/dist/sd-core-common/src/types/DeepPartial.js.map +1 -0
- package/dist/sd-core-common/src/types/DeepPartial.mjs +2 -0
- package/dist/sd-core-common/src/types/ObjectSet.d.ts +4 -0
- package/dist/sd-core-common/src/types/ObjectSet.js.map +1 -0
- package/dist/sd-core-common/src/types/ObjectSet.mjs +18 -0
- package/dist/sd-core-common/src/types/Time.d.ts +27 -0
- package/dist/sd-core-common/src/types/Time.js.map +1 -0
- package/dist/sd-core-common/src/types/Time.mjs +108 -0
- package/dist/sd-core-common/src/types/Type.d.ts +7 -0
- package/dist/sd-core-common/src/types/Type.js.map +1 -0
- package/dist/sd-core-common/src/types/Type.mjs +2 -0
- package/dist/sd-core-common/src/types/UnwrappedType.d.ts +1 -0
- package/dist/sd-core-common/src/types/UnwrappedType.js.map +1 -0
- package/dist/sd-core-common/src/types/UnwrappedType.mjs +2 -0
- package/dist/sd-core-common/src/types/Uuid.d.ts +8 -0
- package/dist/sd-core-common/src/types/Uuid.js.map +1 -0
- package/dist/sd-core-common/src/types/Uuid.mjs +26 -0
- package/dist/sd-core-common/src/types/WrappedType.d.ts +1 -0
- package/dist/sd-core-common/src/types/WrappedType.js.map +1 -0
- package/dist/sd-core-common/src/types/WrappedType.mjs +2 -0
- package/dist/sd-core-common/src/utils/DateTimeFormatUtil.d.ts +12 -0
- package/dist/sd-core-common/src/utils/DateTimeFormatUtil.js.map +1 -0
- package/dist/sd-core-common/src/utils/DateTimeFormatUtil.mjs +67 -0
- package/dist/sd-core-common/src/utils/FunctionQueue.d.ts +8 -0
- package/dist/sd-core-common/src/utils/FunctionQueue.js.map +1 -0
- package/dist/sd-core-common/src/utils/FunctionQueue.mjs +46 -0
- package/dist/sd-core-common/src/utils/FunctionUtil.d.ts +6 -0
- package/dist/sd-core-common/src/utils/FunctionUtil.js.map +1 -0
- package/dist/sd-core-common/src/utils/FunctionUtil.mjs +31 -0
- package/dist/sd-core-common/src/utils/JsonConvert.d.ts +8 -0
- package/dist/sd-core-common/src/utils/JsonConvert.js.map +1 -0
- package/dist/sd-core-common/src/utils/JsonConvert.mjs +78 -0
- package/dist/sd-core-common/src/utils/MathUtil.d.ts +3 -0
- package/dist/sd-core-common/src/utils/MathUtil.js.map +1 -0
- package/dist/sd-core-common/src/utils/MathUtil.mjs +6 -0
- package/dist/sd-core-common/src/utils/NumberUtil.d.ts +6 -0
- package/dist/sd-core-common/src/utils/NumberUtil.js.map +1 -0
- package/dist/sd-core-common/src/utils/NumberUtil.mjs +32 -0
- package/dist/sd-core-common/src/utils/ObjectUtil.d.ts +80 -0
- package/dist/sd-core-common/src/utils/ObjectUtil.js.map +1 -0
- package/dist/sd-core-common/src/utils/ObjectUtil.mjs +452 -0
- package/dist/sd-core-common/src/utils/SdSyncEventEmitter.d.ts +6 -0
- package/dist/sd-core-common/src/utils/SdSyncEventEmitter.js.map +1 -0
- package/dist/sd-core-common/src/utils/SdSyncEventEmitter.mjs +27 -0
- package/dist/sd-core-common/src/utils/StringUtil.d.ts +8 -0
- package/dist/sd-core-common/src/utils/StringUtil.js.map +1 -0
- package/dist/sd-core-common/src/utils/StringUtil.mjs +77 -0
- package/dist/sd-core-common/src/utils/Wait.d.ts +4 -0
- package/dist/sd-core-common/src/utils/Wait.js.map +1 -0
- package/dist/sd-core-common/src/utils/Wait.mjs +23 -0
- package/dist/sd-core-node/src/index.d.ts +6 -0
- package/dist/sd-core-node/src/index.js.map +1 -0
- package/dist/sd-core-node/src/index.mjs +7 -0
- package/dist/sd-core-node/src/utils/FsUtil.d.ts +44 -0
- package/dist/sd-core-node/src/utils/FsUtil.js.map +1 -0
- package/dist/sd-core-node/src/utils/FsUtil.mjs +493 -0
- package/dist/sd-core-node/src/utils/Logger.d.ts +91 -0
- package/dist/sd-core-node/src/utils/Logger.js.map +1 -0
- package/dist/sd-core-node/src/utils/Logger.mjs +185 -0
- package/dist/sd-core-node/src/utils/PathUtil.d.ts +6 -0
- package/dist/sd-core-node/src/utils/PathUtil.js.map +1 -0
- package/dist/sd-core-node/src/utils/PathUtil.mjs +24 -0
- package/dist/sd-core-node/src/utils/SdFsWatcher.d.ts +15 -0
- package/dist/sd-core-node/src/utils/SdFsWatcher.js.map +1 -0
- package/dist/sd-core-node/src/utils/SdFsWatcher.mjs +43 -0
- package/dist/sd-core-node/src/utils/SdProcess.d.ts +5 -0
- package/dist/sd-core-node/src/utils/SdProcess.js.map +1 -0
- package/dist/sd-core-node/src/utils/SdProcess.mjs +36 -0
- package/dist/sd-orm-common/src/CaseQueryHelper.d.ts +12 -0
- package/dist/sd-orm-common/src/CaseQueryHelper.js.map +1 -0
- package/dist/sd-orm-common/src/CaseQueryHelper.mjs +19 -0
- package/dist/sd-orm-common/src/CaseWhenQueryHelper.d.ts +12 -0
- package/dist/sd-orm-common/src/CaseWhenQueryHelper.js.map +1 -0
- package/dist/sd-orm-common/src/CaseWhenQueryHelper.mjs +20 -0
- package/dist/sd-orm-common/src/DbContext.d.ts +81 -0
- package/dist/sd-orm-common/src/DbContext.js.map +1 -0
- package/dist/sd-orm-common/src/DbContext.mjs +635 -0
- package/dist/sd-orm-common/src/IDbConnection.d.ts +15 -0
- package/dist/sd-orm-common/src/IDbConnection.js.map +1 -0
- package/dist/sd-orm-common/src/IDbConnection.mjs +2 -0
- package/dist/sd-orm-common/src/IDbContextExecutor.d.ts +17 -0
- package/dist/sd-orm-common/src/IDbContextExecutor.js.map +1 -0
- package/dist/sd-orm-common/src/IDbContextExecutor.mjs +2 -0
- package/dist/sd-orm-common/src/IDbMigration.d.ts +4 -0
- package/dist/sd-orm-common/src/IDbMigration.js.map +1 -0
- package/dist/sd-orm-common/src/IDbMigration.mjs +2 -0
- package/dist/sd-orm-common/src/QueryBuilder.d.ts +48 -0
- package/dist/sd-orm-common/src/QueryBuilder.js.map +1 -0
- package/dist/sd-orm-common/src/QueryBuilder.mjs +1022 -0
- package/dist/sd-orm-common/src/QueryHelper.d.ts +75 -0
- package/dist/sd-orm-common/src/QueryHelper.js.map +1 -0
- package/dist/sd-orm-common/src/QueryHelper.mjs +627 -0
- package/dist/sd-orm-common/src/QueryUnit.d.ts +10 -0
- package/dist/sd-orm-common/src/QueryUnit.js.map +1 -0
- package/dist/sd-orm-common/src/QueryUnit.mjs +16 -0
- package/dist/sd-orm-common/src/Queryable.d.ts +105 -0
- package/dist/sd-orm-common/src/Queryable.js.map +1 -0
- package/dist/sd-orm-common/src/Queryable.mjs +1375 -0
- package/dist/sd-orm-common/src/SdOrmDataType.d.ts +21 -0
- package/dist/sd-orm-common/src/SdOrmDataType.js.map +1 -0
- package/dist/sd-orm-common/src/SdOrmDataType.mjs +2 -0
- package/dist/sd-orm-common/src/commons.d.ts +400 -0
- package/dist/sd-orm-common/src/commons.js.map +1 -0
- package/dist/sd-orm-common/src/commons.mjs +8 -0
- package/dist/sd-orm-common/src/decorators.d.ts +29 -0
- package/dist/sd-orm-common/src/decorators.js.map +1 -0
- package/dist/sd-orm-common/src/decorators.mjs +89 -0
- package/dist/sd-orm-common/src/index.d.ts +17 -0
- package/dist/sd-orm-common/src/index.js.map +1 -0
- package/dist/sd-orm-common/src/index.mjs +18 -0
- package/dist/sd-orm-common/src/models/SystemMigration.d.ts +3 -0
- package/dist/sd-orm-common/src/models/SystemMigration.js.map +1 -0
- package/dist/sd-orm-common/src/models/SystemMigration.mjs +13 -0
- package/dist/sd-orm-common/src/utils/DbDefinitionUtil.d.ts +14 -0
- package/dist/sd-orm-common/src/utils/DbDefinitionUtil.js.map +1 -0
- package/dist/sd-orm-common/src/utils/DbDefinitionUtil.mjs +66 -0
- package/dist/sd-orm-common/src/utils/SdOrmUtil.d.ts +8 -0
- package/dist/sd-orm-common/src/utils/SdOrmUtil.js.map +1 -0
- package/dist/sd-orm-common/src/utils/SdOrmUtil.mjs +248 -0
- package/dist/sd-orm-node/src/DbConnectionFactory.d.ts +4 -0
- package/dist/sd-orm-node/src/DbConnectionFactory.js.map +1 -0
- package/dist/sd-orm-node/src/DbConnectionFactory.mjs +17 -0
- package/dist/sd-orm-node/src/NodeDbContextExecutor.d.ts +19 -0
- package/dist/sd-orm-node/src/NodeDbContextExecutor.js.map +1 -0
- package/dist/sd-orm-node/src/NodeDbContextExecutor.mjs +71 -0
- package/dist/sd-orm-node/src/SdOrm.d.ts +10 -0
- package/dist/sd-orm-node/src/SdOrm.js.map +1 -0
- package/dist/sd-orm-node/src/SdOrm.mjs +25 -0
- package/dist/sd-orm-node/src/index.d.ts +4 -0
- package/dist/sd-orm-node/src/index.js.map +1 -0
- package/dist/sd-orm-node/src/index.mjs +5 -0
- package/dist/sd-orm-node-mssql/src/MssqlDbConnection.d.ts +25 -0
- package/dist/sd-orm-node-mssql/src/MssqlDbConnection.js.map +1 -0
- package/dist/sd-orm-node-mssql/src/MssqlDbConnection.mjs +321 -0
- package/dist/sd-orm-node-mssql/src/index.d.ts +2 -0
- package/dist/sd-orm-node-mssql/src/index.js.map +1 -0
- package/dist/sd-orm-node-mssql/src/index.mjs +3 -0
- package/dist/sd-orm-node-mysql/src/MysqlDbConnection.d.ts +22 -0
- package/dist/sd-orm-node-mysql/src/MysqlDbConnection.js.map +1 -0
- package/dist/sd-orm-node-mysql/src/MysqlDbConnection.mjs +200 -0
- package/dist/sd-orm-node-mysql/src/index.d.ts +2 -0
- package/dist/sd-orm-node-mysql/src/index.js.map +1 -0
- package/dist/sd-orm-node-mysql/src/index.mjs +3 -0
- package/dist/sd-orm-node-sqlite/src/SqliteDbConnection.d.ts +22 -0
- package/dist/sd-orm-node-sqlite/src/SqliteDbConnection.js.map +1 -0
- package/dist/sd-orm-node-sqlite/src/SqliteDbConnection.mjs +172 -0
- package/dist/sd-orm-node-sqlite/src/index.d.ts +2 -0
- package/dist/sd-orm-node-sqlite/src/index.js.map +1 -0
- package/dist/sd-orm-node-sqlite/src/index.mjs +3 -0
- package/dist/sd-service-common/src/commons-orm.d.ts +4 -0
- package/dist/sd-service-common/src/commons-orm.js.map +1 -0
- package/dist/sd-service-common/src/commons-orm.mjs +2 -0
- package/dist/sd-service-common/src/commons-smtp.d.ts +29 -0
- package/dist/sd-service-common/src/commons-smtp.js.map +1 -0
- package/dist/sd-service-common/src/commons-smtp.mjs +2 -0
- package/dist/sd-service-common/src/commons.d.ts +57 -0
- package/dist/sd-service-common/src/commons.js.map +1 -0
- package/dist/sd-service-common/src/commons.mjs +3 -0
- package/dist/sd-service-common/src/index.d.ts +3 -0
- package/dist/sd-service-common/src/index.js.map +1 -0
- package/dist/sd-service-common/src/index.mjs +4 -0
- package/dist/sd-service-server/src/ApiServiceError.d.ts +12 -0
- package/dist/sd-service-server/src/ApiServiceError.js.map +1 -0
- package/dist/sd-service-server/src/ApiServiceError.mjs +15 -0
- package/dist/sd-service-server/src/SdServiceServer.d.ts +39 -0
- package/dist/sd-service-server/src/SdServiceServer.js.map +1 -0
- package/dist/sd-service-server/src/SdServiceServer.mjs +513 -0
- package/dist/sd-service-server/src/commons.d.ts +23 -0
- package/dist/sd-service-server/src/commons.js.map +1 -0
- package/dist/sd-service-server/src/commons.mjs +3 -0
- package/dist/sd-service-server/src/index.d.ts +8 -0
- package/dist/sd-service-server/src/index.js.map +1 -0
- package/dist/sd-service-server/src/index.mjs +9 -0
- package/dist/sd-service-server/src/services/SdAutoUpdateService.d.ts +4 -0
- package/dist/sd-service-server/src/services/SdAutoUpdateService.js.map +1 -0
- package/dist/sd-service-server/src/services/SdAutoUpdateService.mjs +20 -0
- package/dist/sd-service-server/src/services/SdCryptoService.d.ts +7 -0
- package/dist/sd-service-server/src/services/SdCryptoService.js.map +1 -0
- package/dist/sd-service-server/src/services/SdCryptoService.mjs +39 -0
- package/dist/sd-service-server/src/services/SdOrmService.d.ts +22 -0
- package/dist/sd-service-server/src/services/SdOrmService.js.map +1 -0
- package/dist/sd-service-server/src/services/SdOrmService.mjs +115 -0
- package/dist/sd-service-server/src/services/SdSmtpClientService.d.ts +6 -0
- package/dist/sd-service-server/src/services/SdSmtpClientService.js.map +1 -0
- package/dist/sd-service-server/src/services/SdSmtpClientService.mjs +44 -0
- package/dist/sd-service-server/src/utils/SdServiceServerConfigUtil.d.ts +4 -0
- package/dist/sd-service-server/src/utils/SdServiceServerConfigUtil.js.map +1 -0
- package/dist/sd-service-server/src/utils/SdServiceServerConfigUtil.mjs +36 -0
- package/dist/server-worker.d.ts +1 -0
- package/dist/server-worker.js.map +1 -0
- package/dist/server-worker.mjs +36 -0
- package/dist/utils/SdCliBuildResultUtil.d.ts +1 -4
- package/dist/utils/SdCliBuildResultUtil.js.map +1 -0
- package/dist/utils/SdCliBuildResultUtil.mjs +3 -29
- package/dist/utils/SdCliConfigUtil.js.map +1 -0
- package/dist/utils/SdCliConfigUtil.mjs +1 -1
- package/package.json +14 -56
- package/src/SdLinter.ts +41 -0
- package/src/SdTsIncrementalBuilder.ts +75 -0
- package/src/build-cluster.ts +133 -0
- package/src/builders/SdCliClientBuilder.ts +189 -0
- package/src/builders/SdCliJsLibLinter.ts +72 -0
- package/src/builders/SdCliServerBuilder.ts +191 -0
- package/src/builders/SdCliTsLibBuilder.ts +96 -0
- package/src/commons.ts +21 -112
- package/src/entry/SdCliProject.ts +467 -0
- package/src/sd-cli.ts +136 -0
- package/src/server-worker.ts +45 -0
- package/src/utils/SdCliBuildResultUtil.ts +5 -38
- package/tsconfig.json +9 -0
- package/README.md +0 -105
- package/assets/client-files/assets/icons/icon-128x128.png +0 -0
- package/assets/client-files/assets/icons/icon-144x144.png +0 -0
- package/assets/client-files/assets/icons/icon-152x152.png +0 -0
- package/assets/client-files/assets/icons/icon-192x192.png +0 -0
- package/assets/client-files/assets/icons/icon-384x384.png +0 -0
- package/assets/client-files/assets/icons/icon-512x512.png +0 -0
- package/assets/client-files/assets/icons/icon-72x72.png +0 -0
- package/assets/client-files/assets/icons/icon-96x96.png +0 -0
- package/assets/client-files/favicon.ico +0 -0
- package/dist/SdCliBuildResultError.d.ts +0 -5
- package/dist/SdCliBuildResultError.mjs +0 -8
- package/dist/bin/sd-cli.d.ts +0 -2
- package/dist/bin/sd-cli.mjs +0 -410
- package/dist/build-tool/SdCliCacheCompilerHost.d.ts +0 -10
- package/dist/build-tool/SdCliCacheCompilerHost.mjs +0 -51
- package/dist/build-tool/SdCliCordova.d.ts +0 -16
- package/dist/build-tool/SdCliCordova.mjs +0 -212
- package/dist/build-tool/SdCliElectron.d.ts +0 -9
- package/dist/build-tool/SdCliElectron.mjs +0 -72
- package/dist/build-tool/SdCliGithubApi.d.ts +0 -13
- package/dist/build-tool/SdCliGithubApi.mjs +0 -92
- package/dist/build-tool/SdCliIndexFileGenerator.d.ts +0 -13
- package/dist/build-tool/SdCliIndexFileGenerator.mjs +0 -62
- package/dist/build-tool/SdCliNgCacheCompilerHost.d.ts +0 -12
- package/dist/build-tool/SdCliNgCacheCompilerHost.mjs +0 -43
- package/dist/build-tool/SdCliPackageLinter.d.ts +0 -8
- package/dist/build-tool/SdCliPackageLinter.mjs +0 -62
- package/dist/builder/SdCliClientBuilder.d.ts +0 -26
- package/dist/builder/SdCliClientBuilder.mjs +0 -769
- package/dist/builder/SdCliJsLibBuilder.d.ts +0 -14
- package/dist/builder/SdCliJsLibBuilder.mjs +0 -54
- package/dist/builder/SdCliServerBuilder.d.ts +0 -28
- package/dist/builder/SdCliServerBuilder.mjs +0 -482
- package/dist/builder/SdCliTsLibBuilder.d.ts +0 -35
- package/dist/builder/SdCliTsLibBuilder.mjs +0 -317
- package/dist/entry-points/SdCliFileCrypto.d.ts +0 -7
- package/dist/entry-points/SdCliFileCrypto.mjs +0 -72
- package/dist/entry-points/SdCliLocalUpdate.d.ts +0 -13
- package/dist/entry-points/SdCliLocalUpdate.mjs +0 -100
- package/dist/entry-points/SdCliPrepare.d.ts +0 -5
- package/dist/entry-points/SdCliPrepare.mjs +0 -86
- package/dist/entry-points/SdCliProject.d.ts +0 -34
- package/dist/entry-points/SdCliProject.mjs +0 -416
- package/dist/entry-points/SdCliProjectGenerator.d.ts +0 -44
- package/dist/entry-points/SdCliProjectGenerator.mjs +0 -326
- package/dist/entry-points/file/base/fc_package_eslintrc.d.ts +0 -3
- package/dist/entry-points/file/base/fc_package_eslintrc.mjs +0 -31
- package/dist/entry-points/file/base/fc_package_npmconfig.d.ts +0 -9
- package/dist/entry-points/file/base/fc_package_npmconfig.mjs +0 -32
- package/dist/entry-points/file/base/fc_package_tsconfig.d.ts +0 -5
- package/dist/entry-points/file/base/fc_package_tsconfig.mjs +0 -13
- package/dist/entry-points/file/client/fc_package_AppModule.d.ts +0 -1
- package/dist/entry-points/file/client/fc_package_AppModule.mjs +0 -37
- package/dist/entry-points/file/client/fc_package_AppPage.d.ts +0 -1
- package/dist/entry-points/file/client/fc_package_AppPage.mjs +0 -14
- package/dist/entry-points/file/client/fc_package_Page.d.ts +0 -4
- package/dist/entry-points/file/client/fc_package_Page.mjs +0 -19
- package/dist/entry-points/file/client/fc_package_client_main.d.ts +0 -1
- package/dist/entry-points/file/client/fc_package_client_main.mjs +0 -19
- package/dist/entry-points/file/client/fc_package_index.d.ts +0 -3
- package/dist/entry-points/file/client/fc_package_index.mjs +0 -88
- package/dist/entry-points/file/client/fc_package_manifest.d.ts +0 -5
- package/dist/entry-points/file/client/fc_package_manifest.mjs +0 -54
- package/dist/entry-points/file/client/fc_package_polyfills.d.ts +0 -1
- package/dist/entry-points/file/client/fc_package_polyfills.mjs +0 -11
- package/dist/entry-points/file/client/fc_package_styles.d.ts +0 -1
- package/dist/entry-points/file/client/fc_package_styles.mjs +0 -7
- package/dist/entry-points/file/db/fc_package_DbContext.d.ts +0 -3
- package/dist/entry-points/file/db/fc_package_DbContext.mjs +0 -14
- package/dist/entry-points/file/db/fc_package_DbModel.d.ts +0 -4
- package/dist/entry-points/file/db/fc_package_DbModel.mjs +0 -12
- package/dist/entry-points/file/project/fc_project_editor_config.d.ts +0 -1
- package/dist/entry-points/file/project/fc_project_editor_config.mjs +0 -22
- package/dist/entry-points/file/project/fc_project_eslintrc.d.ts +0 -1
- package/dist/entry-points/file/project/fc_project_eslintrc.mjs +0 -30
- package/dist/entry-points/file/project/fc_project_gitattributes.d.ts +0 -1
- package/dist/entry-points/file/project/fc_project_gitattributes.mjs +0 -6
- package/dist/entry-points/file/project/fc_project_gitignore.d.ts +0 -1
- package/dist/entry-points/file/project/fc_project_gitignore.mjs +0 -27
- package/dist/entry-points/file/project/fc_project_npmconfig.d.ts +0 -7
- package/dist/entry-points/file/project/fc_project_npmconfig.mjs +0 -37
- package/dist/entry-points/file/project/fc_project_readme.d.ts +0 -3
- package/dist/entry-points/file/project/fc_project_readme.mjs +0 -13
- package/dist/entry-points/file/project/fc_project_simplysm.d.ts +0 -1
- package/dist/entry-points/file/project/fc_project_simplysm.mjs +0 -2
- package/dist/entry-points/file/project/fc_project_tsconfig.d.ts +0 -1
- package/dist/entry-points/file/project/fc_project_tsconfig.mjs +0 -25
- package/dist/entry-points/file/server/fc_package_server_main.d.ts +0 -5
- package/dist/entry-points/file/server/fc_package_server_main.mjs +0 -60
- package/dist/index.d.ts +0 -54
- package/dist/index.mjs +0 -55
- package/dist/ng-tools/SdCliNgModuleGenerator.d.ts +0 -29
- package/dist/ng-tools/SdCliNgModuleGenerator.mjs +0 -502
- package/dist/ng-tools/babel/SdCliBbFileMetadata.d.ts +0 -25
- package/dist/ng-tools/babel/SdCliBbFileMetadata.mjs +0 -539
- package/dist/ng-tools/babel/SdCliBbRootMetadata.d.ts +0 -23
- package/dist/ng-tools/babel/SdCliBbRootMetadata.mjs +0 -247
- package/dist/ng-tools/babel/SdCliBbUtil.d.ts +0 -5
- package/dist/ng-tools/babel/SdCliBbUtil.mjs +0 -14
- package/dist/ng-tools/babel/TSdCliBbNgMetadata.d.ts +0 -42
- package/dist/ng-tools/babel/TSdCliBbNgMetadata.mjs +0 -216
- package/dist/ng-tools/babel/TSdCliBbTypeMetadata.d.ts +0 -55
- package/dist/ng-tools/babel/TSdCliBbTypeMetadata.mjs +0 -151
- package/dist/ng-tools/commons.d.ts +0 -9
- package/dist/ng-tools/commons.mjs +0 -2
- package/dist/ng-tools/typescript/SdCliTsFileMetadata.d.ts +0 -61
- package/dist/ng-tools/typescript/SdCliTsFileMetadata.mjs +0 -325
- package/dist/ng-tools/typescript/SdCliTsRootMetadata.d.ts +0 -8
- package/dist/ng-tools/typescript/SdCliTsRootMetadata.mjs +0 -28
- package/dist/ng-tools/typescript/SdCliTsUtil.d.ts +0 -5
- package/dist/ng-tools/typescript/SdCliTsUtil.mjs +0 -28
- package/dist/packages/SdCliPackage.d.ts +0 -22
- package/dist/packages/SdCliPackage.mjs +0 -206
- package/dist/utils/SdCliNpmConfigUtil.d.ts +0 -7
- package/dist/utils/SdCliNpmConfigUtil.mjs +0 -15
- package/dist/worker/build-worker.mjs +0 -67
- package/dist/worker/server-worker.mjs +0 -67
- package/docs/client-add-page.md +0 -8
- package/docs/client-router.md +0 -85
- package/docs/client-sw.md +0 -101
- package/docs/conf-orm.md +0 -81
- package/docs/conf-usage.md +0 -5
- package/docs/lib-local-update.md +0 -50
- package/docs/lib-ts-paths.md +0 -25
- package/lib/cordova-entry.js +0 -22
- package/src/SdCliBuildResultError.ts +0 -9
- package/src/bin/sd-cli.ts +0 -493
- package/src/build-tool/SdCliCacheCompilerHost.ts +0 -79
- package/src/build-tool/SdCliCordova.ts +0 -263
- package/src/build-tool/SdCliElectron.ts +0 -85
- package/src/build-tool/SdCliGithubApi.ts +0 -111
- package/src/build-tool/SdCliIndexFileGenerator.ts +0 -79
- package/src/build-tool/SdCliNgCacheCompilerHost.ts +0 -58
- package/src/build-tool/SdCliPackageLinter.ts +0 -74
- package/src/builder/SdCliClientBuilder.ts +0 -879
- package/src/builder/SdCliJsLibBuilder.ts +0 -70
- package/src/builder/SdCliServerBuilder.ts +0 -552
- package/src/builder/SdCliTsLibBuilder.ts +0 -450
- package/src/entry-points/SdCliFileCrypto.ts +0 -87
- package/src/entry-points/SdCliLocalUpdate.ts +0 -121
- package/src/entry-points/SdCliPrepare.ts +0 -86
- package/src/entry-points/SdCliProject.ts +0 -491
- package/src/entry-points/SdCliProjectGenerator.ts +0 -402
- package/src/entry-points/file/base/fc_package_eslintrc.ts +0 -30
- package/src/entry-points/file/base/fc_package_npmconfig.ts +0 -43
- package/src/entry-points/file/base/fc_package_tsconfig.ts +0 -12
- package/src/entry-points/file/client/fc_package_AppModule.ts +0 -36
- package/src/entry-points/file/client/fc_package_AppPage.ts +0 -13
- package/src/entry-points/file/client/fc_package_Page.ts +0 -19
- package/src/entry-points/file/client/fc_package_client_main.ts +0 -18
- package/src/entry-points/file/client/fc_package_index.ts +0 -87
- package/src/entry-points/file/client/fc_package_manifest.ts +0 -53
- package/src/entry-points/file/client/fc_package_polyfills.ts +0 -10
- package/src/entry-points/file/client/fc_package_styles.ts +0 -6
- package/src/entry-points/file/db/fc_package_DbContext.ts +0 -14
- package/src/entry-points/file/db/fc_package_DbModel.ts +0 -11
- package/src/entry-points/file/project/fc_project_editor_config.ts +0 -21
- package/src/entry-points/file/project/fc_project_eslintrc.ts +0 -29
- package/src/entry-points/file/project/fc_project_gitattributes.ts +0 -5
- package/src/entry-points/file/project/fc_project_gitignore.ts +0 -26
- package/src/entry-points/file/project/fc_project_npmconfig.ts +0 -36
- package/src/entry-points/file/project/fc_project_readme.ts +0 -12
- package/src/entry-points/file/project/fc_project_simplysm.ts +0 -1
- package/src/entry-points/file/project/fc_project_tsconfig.ts +0 -24
- package/src/entry-points/file/server/fc_package_server_main.ts +0 -62
- package/src/index.ts +0 -54
- package/src/ng-tools/SdCliNgModuleGenerator.ts +0 -672
- package/src/ng-tools/babel/SdCliBbFileMetadata.ts +0 -629
- package/src/ng-tools/babel/SdCliBbRootMetadata.ts +0 -292
- package/src/ng-tools/babel/SdCliBbUtil.ts +0 -15
- package/src/ng-tools/babel/TSdCliBbNgMetadata.ts +0 -251
- package/src/ng-tools/babel/TSdCliBbTypeMetadata.ts +0 -212
- package/src/ng-tools/commons.ts +0 -3
- package/src/ng-tools/typescript/SdCliTsFileMetadata.ts +0 -384
- package/src/ng-tools/typescript/SdCliTsRootMetadata.ts +0 -32
- package/src/ng-tools/typescript/SdCliTsUtil.ts +0 -29
- package/src/packages/SdCliPackage.ts +0 -259
- package/src/utils/SdCliNpmConfigUtil.ts +0 -16
- package/src/worker/build-worker.ts +0 -73
- package/src/worker/server-worker.ts +0 -72
- /package/dist/{worker/build-worker.d.ts → build-cluster.d.ts} +0 -0
- /package/dist/{worker/server-worker.d.ts → sd-cli.d.ts} +0 -0
|
@@ -0,0 +1,1022 @@
|
|
|
1
|
+
import { NeverEntryError, Uuid } from "@simplysm/sd-core-common";
|
|
2
|
+
import { QueryHelper } from "./QueryHelper";
|
|
3
|
+
export class QueryBuilder {
|
|
4
|
+
constructor(_dialect) {
|
|
5
|
+
this._dialect = _dialect;
|
|
6
|
+
this.qh = new QueryHelper(this._dialect);
|
|
7
|
+
}
|
|
8
|
+
// ----------------------------------------------------
|
|
9
|
+
// DATABASE
|
|
10
|
+
// ----------------------------------------------------
|
|
11
|
+
// region DATABASE
|
|
12
|
+
createDatabaseIfNotExists(def) {
|
|
13
|
+
if (this._dialect === "mysql") {
|
|
14
|
+
return `
|
|
15
|
+
CREATE DATABASE IF NOT EXISTS ${this.wrap(def.database)};
|
|
16
|
+
ALTER DATABASE ${this.wrap(def.database)} CHARACTER SET utf8 COLLATE utf8_bin;`.trim();
|
|
17
|
+
}
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
19
|
+
else if (this._dialect === "mssql-azure") {
|
|
20
|
+
return `IF NOT EXISTS(SELECT * FROM sys.databases WHERE name='${def.database}') CREATE DATABASE ${this.wrap(def.database)} COLLATE Korean_Wansung_CS_AS (EDITION='Basic', SERVICE_OBJECTIVE='Basic', MAXSIZE = 2 GB)`.trim();
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
return `IF NOT EXISTS(SELECT * FROM sys.databases WHERE name = '${def.database}') CREATE DATABASE ${this.wrap(def.database)} COLLATE Korean_Wansung_CS_AS`;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
clearDatabaseIfExists(def) {
|
|
27
|
+
if (this._dialect === "mysql") {
|
|
28
|
+
return `
|
|
29
|
+
DROP DATABASE IF EXISTS ${this.wrap(def.database)};
|
|
30
|
+
CREATE DATABASE IF NOT EXISTS ${this.wrap(def.database)};
|
|
31
|
+
ALTER DATABASE ${this.wrap(def.database)} CHARACTER SET utf8 COLLATE utf8_bin;`;
|
|
32
|
+
}
|
|
33
|
+
else if (this._dialect === "mssql-azure") {
|
|
34
|
+
return `
|
|
35
|
+
IF EXISTS(select * from sys.databases WHERE name='${def.database}')
|
|
36
|
+
BEGIN
|
|
37
|
+
DECLARE @sql NVARCHAR(MAX);
|
|
38
|
+
SET @sql = N'';
|
|
39
|
+
|
|
40
|
+
-- 프록시저 초기화
|
|
41
|
+
SELECT @sql = @sql + 'DROP PROCEDURE ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(o.name) +';' + CHAR(13) + CHAR(10)
|
|
42
|
+
FROM sys.sql_modules m
|
|
43
|
+
INNER JOIN sys.objects o ON m.object_id=o.object_id
|
|
44
|
+
WHERE type_desc like '%PROCEDURE%'
|
|
45
|
+
AND SCHEMA_NAME(schema_id) <> 'sys'
|
|
46
|
+
|
|
47
|
+
-- 함수 초기화
|
|
48
|
+
SELECT @sql = @sql + 'DROP FUNCTION ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(o.name) + N';' + CHAR(13) + CHAR(10)
|
|
49
|
+
FROM sys.sql_modules m
|
|
50
|
+
INNER JOIN sys.objects o ON m.object_id=o.object_id
|
|
51
|
+
WHERE type_desc like '%function%'
|
|
52
|
+
AND SCHEMA_NAME(schema_id) <> 'sys'
|
|
53
|
+
|
|
54
|
+
-- 뷰 초기화
|
|
55
|
+
SELECT @sql = @sql + 'DROP VIEW ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(v.name) + N';' + CHAR(13) + CHAR(10)
|
|
56
|
+
FROM sys.views v
|
|
57
|
+
WHERE SCHEMA_NAME(schema_id) <> 'sys'
|
|
58
|
+
|
|
59
|
+
-- 테이블 FK 끊기 초기화
|
|
60
|
+
SELECT @sql = @sql + N'ALTER TABLE ' + QUOTENAME(SCHEMA_NAME([tbl].schema_id)) + '.' + QUOTENAME([tbl].[name]) + N' DROP CONSTRAINT ' + QUOTENAME([obj].[name]) + N';' + CHAR(13) + CHAR(10)
|
|
61
|
+
FROM sys.tables [tbl]
|
|
62
|
+
INNER JOIN sys.objects AS [obj] ON [obj].[parent_object_id] = [tbl].[object_id] AND [obj].[type] = 'F'
|
|
63
|
+
|
|
64
|
+
-- 테이블 삭제
|
|
65
|
+
SELECT @sql = @sql + N'DROP TABLE ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME([tbl].[name]) + N';' + CHAR(13) + CHAR(10)
|
|
66
|
+
FROM sys.tables [tbl]
|
|
67
|
+
WHERE [type]= 'U'
|
|
68
|
+
|
|
69
|
+
EXEC(@sql);
|
|
70
|
+
END`.trim();
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
return `
|
|
74
|
+
IF EXISTS(select * from sys.databases WHERE name='${def.database}')
|
|
75
|
+
BEGIN
|
|
76
|
+
DECLARE @sql NVARCHAR(MAX);
|
|
77
|
+
SET @sql = N'';
|
|
78
|
+
|
|
79
|
+
-- 프록시저 초기화
|
|
80
|
+
SELECT @sql = @sql + 'DROP PROCEDURE ${this.wrap(def.database)}.' + QUOTENAME(sch.name) + '.' + QUOTENAME(o.name) +';' + CHAR(13) + CHAR(10)
|
|
81
|
+
FROM ${this.wrap(def.database)}.sys.sql_modules m
|
|
82
|
+
INNER JOIN ${this.wrap(def.database)}.sys.objects o ON m.object_id=o.object_id
|
|
83
|
+
INNER JOIN ${this.wrap(def.database)}.sys.schemas sch ON sch.schema_id = [o].schema_id
|
|
84
|
+
WHERE type_desc like '%PROCEDURE%'
|
|
85
|
+
|
|
86
|
+
-- 함수 초기화
|
|
87
|
+
SELECT @sql = @sql + 'DROP FUNCTION ${this.wrap(def.database)}.' + QUOTENAME(sch.name) + '.' + QUOTENAME(o.name) + N';' + CHAR(13) + CHAR(10)
|
|
88
|
+
FROM ${this.wrap(def.database)}.sys.sql_modules m
|
|
89
|
+
INNER JOIN ${this.wrap(def.database)}.sys.objects o ON m.object_id=o.object_id
|
|
90
|
+
INNER JOIN ${this.wrap(def.database)}.sys.schemas sch ON sch.schema_id = [o].schema_id
|
|
91
|
+
WHERE type_desc like '%function%' AND sch.name <> 'sys'
|
|
92
|
+
|
|
93
|
+
-- 뷰 초기화
|
|
94
|
+
SELECT @sql = @sql + 'DROP VIEW ' + QUOTENAME(sch.name) + '.' + QUOTENAME(v.name) + N';' + CHAR(13) + CHAR(10)
|
|
95
|
+
FROM ${this.wrap(def.database)}.sys.views v
|
|
96
|
+
INNER JOIN ${this.wrap(def.database)}.sys.schemas sch ON sch.schema_id = [v].schema_id
|
|
97
|
+
WHERE sch.name <> 'sys'
|
|
98
|
+
|
|
99
|
+
-- 테이블 FK 끊기 초기화
|
|
100
|
+
SELECT @sql = @sql + N'ALTER TABLE ${this.wrap(def.database)}.' + QUOTENAME(sch.name) + '.' + QUOTENAME([tbl].[name]) + N' DROP CONSTRAINT ' + QUOTENAME([obj].[name]) + N';' + CHAR(13) + CHAR(10)
|
|
101
|
+
FROM ${this.wrap(def.database)}.sys.tables [tbl]
|
|
102
|
+
INNER JOIN ${this.wrap(def.database)}.sys.objects AS [obj] ON [obj].[parent_object_id] = [tbl].[object_id] AND [obj].[type] = 'F'
|
|
103
|
+
INNER JOIN ${this.wrap(def.database)}.sys.schemas sch ON sch.schema_id = [tbl].schema_id
|
|
104
|
+
|
|
105
|
+
-- 테이블 삭제
|
|
106
|
+
SELECT @sql = @sql + N'DROP TABLE ${this.wrap(def.database)}.' + QUOTENAME(sch.name) + '.' + QUOTENAME([tbl].[name]) + N';' + CHAR(13) + CHAR(10)
|
|
107
|
+
FROM ${this.wrap(def.database)}.sys.tables [tbl]
|
|
108
|
+
INNER JOIN ${this.wrap(def.database)}.sys.schemas sch ON sch.schema_id = [tbl].schema_id
|
|
109
|
+
WHERE [type]= 'U'
|
|
110
|
+
|
|
111
|
+
EXEC(@sql);
|
|
112
|
+
END`.trim();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
getDatabaseInfo(def) {
|
|
116
|
+
if (this._dialect === "mysql") {
|
|
117
|
+
return `SELECT * FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='${def.database}'`.trim();
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
return `SELECT * FROM dbo.sysdatabases WHERE name='${def.database}'`.trim();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
getTableInfos(def) {
|
|
124
|
+
if (this._dialect === "mysql") {
|
|
125
|
+
if (def?.database === undefined)
|
|
126
|
+
throw new NeverEntryError();
|
|
127
|
+
return `SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='${def.database}'`.trim();
|
|
128
|
+
}
|
|
129
|
+
else if (this._dialect === "mssql-azure") {
|
|
130
|
+
return `SELECT * FROM [INFORMATION_SCHEMA].[TABLES]${def?.schema !== undefined ? ` WHERE TABLE_SCHEMA='${def.schema}'` : ""}`.trim();
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
if (def?.database === undefined)
|
|
134
|
+
throw new NeverEntryError();
|
|
135
|
+
return `SELECT * FROM ${this.wrap(def.database)}.[INFORMATION_SCHEMA].[TABLES]${def.schema !== undefined ? ` WHERE TABLE_SCHEMA='${def.schema}'` : ""}`.trim();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
getTableInfo(def) {
|
|
139
|
+
if (this._dialect === "sqlite") {
|
|
140
|
+
return `SELECT * FROM sqlite_master WHERE type='table' AND name='${def.table.name}'`.trim();
|
|
141
|
+
}
|
|
142
|
+
else if (this._dialect === "mysql") {
|
|
143
|
+
if (def.table.database === undefined)
|
|
144
|
+
throw new NeverEntryError();
|
|
145
|
+
return `SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='${def.table.database}' AND TABLE_NAME='${def.table.name}'`.trim();
|
|
146
|
+
}
|
|
147
|
+
else if (this._dialect === "mssql-azure") {
|
|
148
|
+
if (def.table.schema === undefined)
|
|
149
|
+
throw new NeverEntryError();
|
|
150
|
+
return `SELECT * FROM [INFORMATION_SCHEMA].[TABLES] WHERE TABLE_SCHEMA='${def.table.schema}' AND TABLE_NAME='${def.table.name}'`.trim();
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
if (def.table.database === undefined || def.table.schema === undefined)
|
|
154
|
+
throw new NeverEntryError();
|
|
155
|
+
return `SELECT * FROM ${this.wrap(def.table.database)}.[INFORMATION_SCHEMA].[TABLES] WHERE TABLE_SCHEMA='${def.table.schema}' AND TABLE_NAME='${def.table.name}'`.trim();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
getTableColumnInfos(def) {
|
|
159
|
+
if (this._dialect === "mysql") {
|
|
160
|
+
throw new Error("MYSQL 미구현");
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
const databaseDot = def.table.database !== undefined ? def.table.database + "." : "";
|
|
164
|
+
const schemaDot = def.table.schema !== undefined ? def.table.schema + "." : "";
|
|
165
|
+
return `
|
|
166
|
+
SELECT
|
|
167
|
+
c2.COLUMN_NAME as name,
|
|
168
|
+
c2.DATA_TYPE as dataType,
|
|
169
|
+
c2.CHARACTER_MAXIMUM_LENGTH as length,
|
|
170
|
+
c2.NUMERIC_PRECISION as precision,
|
|
171
|
+
c2.NUMERIC_SCALE as digits,
|
|
172
|
+
c.is_nullable as nullable,
|
|
173
|
+
c.is_identity as autoIncrement
|
|
174
|
+
FROM ${databaseDot}sys.columns c
|
|
175
|
+
INNER JOIN ${databaseDot}[INFORMATION_SCHEMA].[COLUMNS] c2 ON OBJECT_ID(c2.TABLE_CATALOG + '.' + c2.TABLE_SCHEMA + '.' + c2.TABLE_NAME) = c.object_id AND c2.ORDINAL_POSITION = c.column_id
|
|
176
|
+
WHERE c.object_id = OBJECT_ID('${databaseDot}${schemaDot}${def.table.name}')
|
|
177
|
+
`.trim();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
getTablePrimaryKeys(def) {
|
|
181
|
+
if (this._dialect === "mysql") {
|
|
182
|
+
throw new Error("MYSQL 미구현");
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
const databaseDot = def.table.database !== undefined ? def.table.database + "." : "";
|
|
186
|
+
const schemaDot = def.table.schema !== undefined ? def.table.schema + "." : "";
|
|
187
|
+
return `
|
|
188
|
+
SELECT c.name as name
|
|
189
|
+
FROM ${databaseDot}sys.indexes i
|
|
190
|
+
INNER JOIN ${databaseDot}sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
|
|
191
|
+
INNER JOIN ${databaseDot}sys.columns c ON ic.object_id = c.object_id AND c.column_id = ic.column_id
|
|
192
|
+
WHERE i.type = 1 AND i.object_id = OBJECT_ID('${databaseDot}${schemaDot}${def.table.name}')
|
|
193
|
+
ORDER BY ic.key_ordinal;
|
|
194
|
+
`.trim();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
getTableForeignKeys(def) {
|
|
198
|
+
if (this._dialect === "mysql") {
|
|
199
|
+
throw new Error("MYSQL 미구현");
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
const databaseDot = def.table.database !== undefined ? def.table.database + "." : "";
|
|
203
|
+
const schemaDot = def.table.schema !== undefined ? def.table.schema + "." : "";
|
|
204
|
+
return `
|
|
205
|
+
SELECT
|
|
206
|
+
f.name as name,
|
|
207
|
+
sc.name as sourceColumnName,
|
|
208
|
+
ts.name as targetSchemaName,
|
|
209
|
+
tt.name as targetTableName
|
|
210
|
+
FROM SIMPLYSM_TS.sys.foreign_keys f
|
|
211
|
+
INNER JOIN SIMPLYSM_TS.sys.foreign_key_columns fc ON f.object_id = fc.constraint_object_id
|
|
212
|
+
INNER JOIN SIMPLYSM_TS.sys.columns sc ON sc.object_id = fc.parent_object_id AND sc.column_id = fc.parent_column_id
|
|
213
|
+
INNER JOIN SIMPLYSM_TS.sys.tables tt ON tt.object_id = f.referenced_object_id
|
|
214
|
+
INNER JOIN SIMPLYSM_TS.sys.schemas ts ON ts.schema_id = tt.schema_id
|
|
215
|
+
WHERE f.parent_object_id = OBJECT_ID('${databaseDot}${schemaDot}${def.table.name}')
|
|
216
|
+
ORDER BY f.object_id, fc.constraint_column_id
|
|
217
|
+
`.trim();
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
getTableIndexes(def) {
|
|
221
|
+
if (this._dialect === "mysql") {
|
|
222
|
+
throw new Error("MYSQL 미구현");
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
const databaseDot = def.table.database !== undefined ? def.table.database + "." : "";
|
|
226
|
+
const schemaDot = def.table.schema !== undefined ? def.table.schema + "." : "";
|
|
227
|
+
return `
|
|
228
|
+
SELECT
|
|
229
|
+
i.name as name,
|
|
230
|
+
c.name as columnName,
|
|
231
|
+
ic.is_descending_key as isDesc
|
|
232
|
+
FROM ${databaseDot}sys.indexes i
|
|
233
|
+
INNER JOIN ${databaseDot}sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
|
|
234
|
+
INNER JOIN ${databaseDot}sys.columns c ON ic.object_id = c.object_id AND c.column_id = ic.column_id
|
|
235
|
+
WHERE i.type = 2 AND i.object_id = OBJECT_ID('${databaseDot}${schemaDot}${def.table.name}')
|
|
236
|
+
ORDER BY i.index_id, ic.key_ordinal;
|
|
237
|
+
`.trim();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
createTable(def) {
|
|
241
|
+
const tableName = this.getTableName(def.table);
|
|
242
|
+
let query = "";
|
|
243
|
+
query += `CREATE TABLE ${tableName}
|
|
244
|
+
( `;
|
|
245
|
+
const colDefs = def.columns.map((colDef) => ({
|
|
246
|
+
...colDef,
|
|
247
|
+
pkOrderBy: def.primaryKeys.single((pk) => pk.columnName === colDef.name)?.orderBy
|
|
248
|
+
}));
|
|
249
|
+
query += colDefs.map((colDef) => " " + this._getQueryOfColDef(colDef)).join(",\n");
|
|
250
|
+
if (this._dialect === "sqlite") {
|
|
251
|
+
}
|
|
252
|
+
else if (def.primaryKeys.length > 0) {
|
|
253
|
+
query += ",\n";
|
|
254
|
+
if (this._dialect === "mysql") {
|
|
255
|
+
query += ` PRIMARY KEY (${def.primaryKeys.map((item) => `${this.wrap(item.columnName) + (item.orderBy === "ASC" ? "" : ` ${item.orderBy}`)}`).join(", ")})\n`;
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
const pkName = this.wrap(`PK_${def.table.name}`);
|
|
259
|
+
query += ` CONSTRAINT ${pkName} PRIMARY KEY (${def.primaryKeys.map((item) => (this.wrap(item.columnName) + (item.orderBy === "ASC" ? "" : ` ${item.orderBy}`))).join(", ")})\n`;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
query += "\n";
|
|
264
|
+
}
|
|
265
|
+
query += ");";
|
|
266
|
+
return query.trim();
|
|
267
|
+
}
|
|
268
|
+
createView(def) {
|
|
269
|
+
const tableName = this.getTableNameWithoutDatabase(def.table);
|
|
270
|
+
return `CREATE VIEW ${tableName} AS\n${this.query({ type: "select", ...def.queryDef })}`.trim();
|
|
271
|
+
}
|
|
272
|
+
dropTable(def) {
|
|
273
|
+
const tableName = this.getTableName(def.table);
|
|
274
|
+
return `DROP TABLE ${tableName}`;
|
|
275
|
+
}
|
|
276
|
+
addColumn(def) {
|
|
277
|
+
const tableName = this.getTableName(def.table);
|
|
278
|
+
const queries = [];
|
|
279
|
+
if (!def.column.nullable && def.column.defaultValue !== undefined) {
|
|
280
|
+
queries.push(`ALTER TABLE ${tableName}
|
|
281
|
+
ADD ${this._getQueryOfColDef({
|
|
282
|
+
...def.column,
|
|
283
|
+
nullable: true
|
|
284
|
+
})}`);
|
|
285
|
+
queries.push(`UPDATE ${tableName}
|
|
286
|
+
SET ${this.wrap(def.column.name)} = ${this.getQueryOfQueryValue(def.column.defaultValue)}`);
|
|
287
|
+
queries.push(`ALTER TABLE ${tableName} ALTER COLUMN ${this._getQueryOfColDef(def.column)}`);
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
queries.push(`ALTER TABLE ${tableName}
|
|
291
|
+
ADD ${this._getQueryOfColDef(def.column)}`);
|
|
292
|
+
}
|
|
293
|
+
return queries;
|
|
294
|
+
}
|
|
295
|
+
removeColumn(def) {
|
|
296
|
+
const tableName = this.getTableName(def.table);
|
|
297
|
+
return `ALTER TABLE ${tableName} DROP COLUMN ${this.wrap(def.column)}`;
|
|
298
|
+
}
|
|
299
|
+
modifyColumn(def) {
|
|
300
|
+
if (this._dialect === "mysql") {
|
|
301
|
+
const tableName = this.getTableName(def.table);
|
|
302
|
+
const queries = [];
|
|
303
|
+
if (!def.column.nullable && def.column.defaultValue !== undefined) {
|
|
304
|
+
queries.push(`ALTER TABLE ${tableName} MODIFY COLUMN ${this._getQueryOfColDef({
|
|
305
|
+
...def.column,
|
|
306
|
+
nullable: true
|
|
307
|
+
})}`);
|
|
308
|
+
queries.push(`UPDATE ${tableName}
|
|
309
|
+
SET ${this.wrap(def.column.name)} = ${this.getQueryOfQueryValue(def.column.defaultValue)}
|
|
310
|
+
WHERE ${this.wrap(def.column.name)} IS NULL`);
|
|
311
|
+
}
|
|
312
|
+
queries.push(`ALTER TABLE ${tableName} MODIFY COLUMN ${this._getQueryOfColDef(def.column)}`);
|
|
313
|
+
return queries;
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
const tableName = this.getTableName(def.table);
|
|
317
|
+
const queries = [];
|
|
318
|
+
if (!def.column.nullable && def.column.defaultValue !== undefined) {
|
|
319
|
+
queries.push(`ALTER TABLE ${tableName} ALTER COLUMN ${this._getQueryOfColDef({
|
|
320
|
+
...def.column,
|
|
321
|
+
nullable: true
|
|
322
|
+
})}`);
|
|
323
|
+
queries.push(`UPDATE ${tableName}
|
|
324
|
+
SET ${this.wrap(def.column.name)} = ${this.getQueryOfQueryValue(def.column.defaultValue)}
|
|
325
|
+
WHERE ${this.wrap(def.column.name)} IS NULL`);
|
|
326
|
+
}
|
|
327
|
+
queries.push(`ALTER TABLE ${tableName} ALTER COLUMN ${this._getQueryOfColDef(def.column)}`);
|
|
328
|
+
return queries;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
renameColumn(def) {
|
|
332
|
+
if (this._dialect === "mysql") {
|
|
333
|
+
const tableName = this.getTableName(def.table);
|
|
334
|
+
return `ALTER TABLE ${tableName} RENAME COLUMN ${this.wrap(def.prevName)} TO ${this.wrap(def.nextName)}`;
|
|
335
|
+
}
|
|
336
|
+
else if (this._dialect === "mssql-azure") {
|
|
337
|
+
if (def.table.schema === undefined)
|
|
338
|
+
throw new NeverEntryError();
|
|
339
|
+
return `EXECUTE sp_rename N'${def.table.schema}.${def.table.name}.${this.wrap(def.prevName)}', N'${def.nextName}', 'COLUMN'`;
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
if (def.table.database === undefined || def.table.schema === undefined)
|
|
343
|
+
throw new NeverEntryError();
|
|
344
|
+
return `EXECUTE ${def.table.database}..sp_rename N'${def.table.schema}.${def.table.name}.${this.wrap(def.prevName)}', N'${def.nextName}', 'COLUMN'`;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
dropPrimaryKey(def) {
|
|
348
|
+
if (this._dialect === "mysql") {
|
|
349
|
+
throw new Error("MYSQL 미구현");
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
const databaseDot = def.table.database !== undefined ? def.table.database + "." : "";
|
|
353
|
+
const schemaDot = def.table.schema !== undefined ? def.table.schema + "." : "";
|
|
354
|
+
return `ALTER TABLE ${databaseDot}${schemaDot}${def.table.name} DROP CONSTRAINT PK_${def.table.name}`;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
addPrimaryKey(def) {
|
|
358
|
+
if (this._dialect === "mysql") {
|
|
359
|
+
throw new Error("MYSQL 미구현");
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
const databaseDot = def.table.database !== undefined ? def.table.database + "." : "";
|
|
363
|
+
const schemaDot = def.table.schema !== undefined ? def.table.schema + "." : "";
|
|
364
|
+
return `ALTER TABLE ${databaseDot}${schemaDot}${def.table.name} ADD CONSTRAINT PK_${def.table.name} PRIMARY KEY (${def.columns.map((item) => this.wrap(item)).join(", ")})`;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
addForeignKey(def) {
|
|
368
|
+
if (this._dialect === "sqlite") {
|
|
369
|
+
const tableName = this.getTableNameChain(def.table).join(".");
|
|
370
|
+
const tableNameChain = this.getTableNameChain(def.table);
|
|
371
|
+
const tableKey = tableNameChain.join("_").length > 30
|
|
372
|
+
? tableNameChain.join("_").replace(/[a-z]/g, "")
|
|
373
|
+
: tableNameChain.join("_");
|
|
374
|
+
const fkName = this.wrap(`FK_${tableKey}_${def.foreignKey.name}`);
|
|
375
|
+
const targetTableName = this.getTableName(def.foreignKey.targetTable);
|
|
376
|
+
return `
|
|
377
|
+
pragma writable_schema=1;
|
|
378
|
+
UPDATE sqlite_master
|
|
379
|
+
SET sql = SUBSTR(sql, 1, LENGTH(sql) - 1) || ',
|
|
380
|
+
CONSTRAINT ${fkName} FOREIGN KEY (${def.foreignKey.fkColumns.map((columnName) => `${this.wrap(columnName)}`).join(", ")})
|
|
381
|
+
REFERENCES ${targetTableName}(${def.foreignKey.targetPkColumns.map((columnName) => `${this.wrap(columnName)}`).join(", ")})
|
|
382
|
+
ON UPDATE RESTRICT
|
|
383
|
+
ON DELETE RESTRICT
|
|
384
|
+
)'
|
|
385
|
+
WHERE name = '${tableName}' AND type = 'table'
|
|
386
|
+
RETURNING *;
|
|
387
|
+
pragma writable_schema=0;`.trim();
|
|
388
|
+
}
|
|
389
|
+
else {
|
|
390
|
+
const tableName = this.getTableName(def.table);
|
|
391
|
+
const tableNameChain = this.getTableNameChain(def.table);
|
|
392
|
+
const tableKey = this._dialect === "mysql" && tableNameChain.join("_").length > 30
|
|
393
|
+
? tableNameChain.join("_").replace(/[a-z]/g, "")
|
|
394
|
+
: tableNameChain.join("_");
|
|
395
|
+
const fkName = this.wrap(`FK_${tableKey}_${def.foreignKey.name}`);
|
|
396
|
+
const targetTableName = this.getTableName(def.foreignKey.targetTable);
|
|
397
|
+
let query = "";
|
|
398
|
+
query += `ALTER TABLE ${tableName}
|
|
399
|
+
ADD CONSTRAINT ${fkName} FOREIGN KEY (${def.foreignKey.fkColumns.map((columnName) => `${this.wrap(columnName)}`).join(", ")}) `;
|
|
400
|
+
query += ` REFERENCES ${targetTableName} (${def.foreignKey.targetPkColumns.map((columnName) => `${this.wrap(columnName)}`).join(", ")})\n`;
|
|
401
|
+
query += " ON DELETE NO ACTION\n";
|
|
402
|
+
query += " ON UPDATE NO ACTION;";
|
|
403
|
+
return query.trim();
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
removeForeignKey(def) {
|
|
407
|
+
const tableName = this.getTableName(def.table);
|
|
408
|
+
const tableNameChain = this.getTableNameChain(def.table);
|
|
409
|
+
const tableKey = this._dialect === "mysql" && tableNameChain.join("_").length > 30
|
|
410
|
+
? tableNameChain.join("_").replace(/[a-z]/g, "")
|
|
411
|
+
: tableNameChain.join("_");
|
|
412
|
+
const fkName = this.wrap(`FK_${tableKey}_${def.foreignKey}`);
|
|
413
|
+
return `ALTER TABLE ${tableName} DROP CONSTRAINT ${fkName};`;
|
|
414
|
+
}
|
|
415
|
+
createIndex(def) {
|
|
416
|
+
const tableName = this.getTableName(def.table);
|
|
417
|
+
const tableNameChain = this._dialect === "mysql" ? this.getTableNameChain(def.table) : this.getTableNameChain(def.table).slice(-2);
|
|
418
|
+
const tableKey = this._dialect === "mysql" && tableNameChain.join("_").length > 30
|
|
419
|
+
? tableNameChain.join("_").replace(/[a-z]/g, "")
|
|
420
|
+
: tableNameChain.join("_");
|
|
421
|
+
const isUnique = def.index.columns.some((item) => item.unique);
|
|
422
|
+
const idxName = this.wrap(`${isUnique ? "UDX" : "IDX"}_${tableKey}_${def.index.name}`);
|
|
423
|
+
return `CREATE
|
|
424
|
+
${isUnique ? "UNIQUE " : ""}INDEX
|
|
425
|
+
${idxName}
|
|
426
|
+
ON
|
|
427
|
+
${tableName}
|
|
428
|
+
(
|
|
429
|
+
${def.index.columns.map((item) => `${this.wrap(item.name)} ${item.orderBy}`).join(", ")}
|
|
430
|
+
);`;
|
|
431
|
+
}
|
|
432
|
+
dropIndex(def) {
|
|
433
|
+
const tableName = this.getTableName(def.table);
|
|
434
|
+
const tableNameChain = this._dialect === "mysql" ? this.getTableNameChain(def.table) : this.getTableNameChain(def.table).slice(-2);
|
|
435
|
+
const tableKey = this._dialect === "mysql" && tableNameChain.join("_").length > 30
|
|
436
|
+
? tableNameChain.join("_").replace(/[a-z]/g, "")
|
|
437
|
+
: tableNameChain.join("_");
|
|
438
|
+
const idxName = this.wrap(`IDX_${tableKey}_${def.index}`);
|
|
439
|
+
return `DROP INDEX ${idxName} ON ${tableName};`;
|
|
440
|
+
}
|
|
441
|
+
configIdentityInsert(def) {
|
|
442
|
+
const tableName = this.getTableName(def.table);
|
|
443
|
+
return `SET IDENTITY_INSERT ${tableName} ${def.state.toUpperCase()}`;
|
|
444
|
+
}
|
|
445
|
+
configForeignKeyCheck(def) {
|
|
446
|
+
if (this._dialect === "mysql") {
|
|
447
|
+
return `SET foreign_key_checks=${def.useCheck ? 1 : 0};`;
|
|
448
|
+
}
|
|
449
|
+
else {
|
|
450
|
+
const tableName = this.getTableName(def.table);
|
|
451
|
+
return `ALTER TABLE ${tableName} ${def.useCheck ? "" : "NO"} CHECK CONSTRAINT ALL;`;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
// endregion
|
|
455
|
+
// ----------------------------------------------------
|
|
456
|
+
// TABLE
|
|
457
|
+
// ----------------------------------------------------
|
|
458
|
+
// region TABLE
|
|
459
|
+
select(def) {
|
|
460
|
+
if (def.top !== undefined && def.limit) {
|
|
461
|
+
throw new Error("TOP과 LIMIT은 함께사용할 수 없습니다.");
|
|
462
|
+
}
|
|
463
|
+
let q = "SELECT";
|
|
464
|
+
if (def.distinct) {
|
|
465
|
+
q += " DISTINCT";
|
|
466
|
+
}
|
|
467
|
+
if (this._dialect === "mssql" || this._dialect === "mssql-azure") {
|
|
468
|
+
if (def.top !== undefined) {
|
|
469
|
+
q += ` TOP ${def.top}`;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
// SELECT FIELDS
|
|
473
|
+
if (def.select) {
|
|
474
|
+
q += "\n";
|
|
475
|
+
const selectFieldQueryStrings = [];
|
|
476
|
+
for (const selectKey of Object.keys(def.select)) {
|
|
477
|
+
const selectValue = def.select[selectKey];
|
|
478
|
+
if (selectValue?.["from"] !== undefined) {
|
|
479
|
+
const selectQueryDef = selectValue;
|
|
480
|
+
let subQuery = " (\n";
|
|
481
|
+
subQuery += " " + this.select(selectQueryDef).replace(/\n/g, "\n ") + "\n";
|
|
482
|
+
subQuery += ` ) as ${selectKey}`;
|
|
483
|
+
selectFieldQueryStrings.push(subQuery);
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
selectFieldQueryStrings.push(` ${this.getQueryOfQueryValue(def.select[selectKey])} as ${selectKey}`);
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
q += selectFieldQueryStrings.join(",\n");
|
|
490
|
+
q += "\n";
|
|
491
|
+
}
|
|
492
|
+
else {
|
|
493
|
+
q += " *\n";
|
|
494
|
+
}
|
|
495
|
+
// FROM
|
|
496
|
+
if (def.from instanceof Array) {
|
|
497
|
+
q += "FROM (\n";
|
|
498
|
+
for (const from of def.from) {
|
|
499
|
+
q += " " + this.select(from).replace(/\n/g, "\n ");
|
|
500
|
+
q += "\n\n UNION ALL\n\n";
|
|
501
|
+
}
|
|
502
|
+
q = q.slice(0, -14);
|
|
503
|
+
q += ")";
|
|
504
|
+
}
|
|
505
|
+
else if (def.from?.["from"] !== undefined) {
|
|
506
|
+
const fromQueryDef = def.from;
|
|
507
|
+
q += "FROM (\n";
|
|
508
|
+
q += " " + this.select(fromQueryDef).replace(/\n/g, "\n ") + "\n";
|
|
509
|
+
q += ")";
|
|
510
|
+
}
|
|
511
|
+
else if (def.from !== undefined) {
|
|
512
|
+
q += `FROM ${def.from}`;
|
|
513
|
+
}
|
|
514
|
+
if (def.from !== undefined && def.as !== undefined) {
|
|
515
|
+
q += ` as ${def.as}`;
|
|
516
|
+
}
|
|
517
|
+
if (typeof def.from === "string" && def.lock) {
|
|
518
|
+
q += " with (XLOCK)";
|
|
519
|
+
}
|
|
520
|
+
q += "\n";
|
|
521
|
+
// PIVOT
|
|
522
|
+
if (this._dialect !== "mysql") {
|
|
523
|
+
if (def.pivot) {
|
|
524
|
+
let valueCol = this.getQueryOfQueryValue(def.pivot.valueColumn);
|
|
525
|
+
valueCol = valueCol.startsWith("(") && valueCol.endsWith(")") ? valueCol.slice(1, -1) : valueCol;
|
|
526
|
+
q += `PIVOT (${valueCol} FOR ${this.getQueryOfQueryValue(def.pivot.pivotColumn)}`;
|
|
527
|
+
q += ` IN (${def.pivot.pivotKeys.map((key) => this.wrap(key)).join(", ")}))${def.as !== undefined ? ` as ${def.as}` : ""}`;
|
|
528
|
+
q += "\n";
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
// UNPIVOT
|
|
532
|
+
if (def.unpivot) {
|
|
533
|
+
let valueCol = this.getQueryOfQueryValue(def.unpivot.valueColumn);
|
|
534
|
+
valueCol = valueCol.startsWith("(") && valueCol.endsWith(")") ? valueCol.slice(1, -1) : valueCol;
|
|
535
|
+
q += `UNPIVOT (${valueCol} FOR ${this.getQueryOfQueryValue(def.unpivot.pivotColumn)}`;
|
|
536
|
+
q += ` IN (${def.unpivot.pivotKeys.map((key) => this.wrap(key)).join(", ")}))${def.as !== undefined ? ` as ${def.as}` : ""}`;
|
|
537
|
+
q += "\n";
|
|
538
|
+
}
|
|
539
|
+
// JOIN
|
|
540
|
+
if (def.join && def.join.length > 0) {
|
|
541
|
+
for (const joinDef of def.join) {
|
|
542
|
+
q += this._getQueryOfJoinDef(joinDef);
|
|
543
|
+
q += "\n";
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
// WHERE
|
|
547
|
+
if (def.where) {
|
|
548
|
+
q += `WHERE ${def.where.map((item) => this.getQueryOfQueryValue(item)).join("")}`;
|
|
549
|
+
q += "\n";
|
|
550
|
+
}
|
|
551
|
+
// GROUP BY
|
|
552
|
+
if (def.groupBy && def.groupBy.length > 0) {
|
|
553
|
+
q += `GROUP BY ${def.groupBy.map((item) => this.getQueryOfQueryValue(item)).join(", ")}`;
|
|
554
|
+
q += "\n";
|
|
555
|
+
}
|
|
556
|
+
// HAVING
|
|
557
|
+
if (def.having) {
|
|
558
|
+
if (!(def.groupBy && def.groupBy.length > 0)) {
|
|
559
|
+
throw new Error("'HAVING'을 사용하려면, 'GROUP BY'를 반드시 설정해야 합니다.");
|
|
560
|
+
}
|
|
561
|
+
q += `HAVING ${def.having.map((item) => this.getQueryOfQueryValue(item)).join("")}`;
|
|
562
|
+
q += "\n";
|
|
563
|
+
}
|
|
564
|
+
// ORDER BY
|
|
565
|
+
if (def.orderBy && def.orderBy.length > 0) {
|
|
566
|
+
q += `ORDER BY ${def.orderBy.map((item) => this.getQueryOfQueryValue(item[0]) + " " + item[1]).join(", ")}`;
|
|
567
|
+
q += "\n";
|
|
568
|
+
}
|
|
569
|
+
// LIMIT
|
|
570
|
+
if (def.limit) {
|
|
571
|
+
if (!(def.orderBy && def.orderBy.length > 0)) {
|
|
572
|
+
throw new Error("'LIMIT'을 사용하려면, 'ORDER BY'를 반드시 설정해야 합니다.");
|
|
573
|
+
}
|
|
574
|
+
if (this._dialect === "mssql" || this._dialect === "mssql-azure") {
|
|
575
|
+
q += `OFFSET ${def.limit[0]} ROWS FETCH NEXT ${def.limit[1]} ROWS ONLY`;
|
|
576
|
+
q += "\n";
|
|
577
|
+
}
|
|
578
|
+
else {
|
|
579
|
+
q += `LIMIT ${def.limit[0]}, ${def.limit[1]}`;
|
|
580
|
+
q += "\n";
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
if (this._dialect !== "mssql" && this._dialect !== "mssql-azure") {
|
|
584
|
+
if (def.top !== undefined) {
|
|
585
|
+
q += `LIMIT ${def.top}`;
|
|
586
|
+
q += "\n";
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
// SAMPLE
|
|
590
|
+
if (def.sample !== undefined) {
|
|
591
|
+
if (this._dialect === "mssql") {
|
|
592
|
+
q += `TABLESAMPLE (${def.sample} ROWS)`;
|
|
593
|
+
q += "\n";
|
|
594
|
+
}
|
|
595
|
+
else {
|
|
596
|
+
throw new Error("'select > sample'의 경우 mssql만 구현되어 있습니다.");
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
return q.trim();
|
|
600
|
+
}
|
|
601
|
+
insertInto(def) {
|
|
602
|
+
let q = "";
|
|
603
|
+
q += `INSERT INTO ${def.target} (${Object.keys(def.select).join(", ")})`;
|
|
604
|
+
q += "\n";
|
|
605
|
+
q += this.select(def);
|
|
606
|
+
return q.trim() + ";";
|
|
607
|
+
}
|
|
608
|
+
insert(def) {
|
|
609
|
+
let q = "";
|
|
610
|
+
q += `INSERT INTO ${def.from} (${Object.keys(def.record).join(", ")})`;
|
|
611
|
+
q += "\n";
|
|
612
|
+
if (this._dialect === "mssql" || this._dialect === "mssql-azure") {
|
|
613
|
+
if (def.output) {
|
|
614
|
+
q += `OUTPUT ${def.output.map((item) => "INSERTED." + item).join(", ")}`;
|
|
615
|
+
q += "\n";
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
q += `VALUES (${Object.values(def.record).map((val) => this.getQueryOfQueryValue(val)).join(", ")})`;
|
|
619
|
+
q += "\n";
|
|
620
|
+
if (this._dialect === "sqlite") {
|
|
621
|
+
if (def.output) {
|
|
622
|
+
q += `RETURNING ${def.output.join(", ")}`;
|
|
623
|
+
q += "\n";
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
return q.trim() + ";";
|
|
627
|
+
}
|
|
628
|
+
update(def) {
|
|
629
|
+
if (this._dialect === "sqlite") {
|
|
630
|
+
if (def.join && def.join.length > 0) {
|
|
631
|
+
throw new Error("sqlite - update - join 미구현");
|
|
632
|
+
}
|
|
633
|
+
else if (def.limit || def.top !== undefined) {
|
|
634
|
+
throw new Error("sqlite - update - limit, top 미구현");
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
if (def.as === undefined)
|
|
638
|
+
throw new NeverEntryError();
|
|
639
|
+
if (def.top !== undefined && def.limit) {
|
|
640
|
+
throw new Error("TOP과 LIMIT은 함께사용할 수 없습니다.");
|
|
641
|
+
}
|
|
642
|
+
let q = "";
|
|
643
|
+
// LINE 1
|
|
644
|
+
q += "UPDATE";
|
|
645
|
+
if (this._dialect === "mssql" || this._dialect === "mssql-azure") {
|
|
646
|
+
if (def.top !== undefined) {
|
|
647
|
+
q += ` TOP (${def.top})`;
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
if (this._dialect !== "mssql" && this._dialect !== "mssql-azure") {
|
|
651
|
+
// FROM, AS
|
|
652
|
+
q += ` ${def.from} as ${def.as}`;
|
|
653
|
+
q += "\n";
|
|
654
|
+
// JOIN
|
|
655
|
+
if (def.join && def.join.length > 0) {
|
|
656
|
+
for (const joinDef of def.join) {
|
|
657
|
+
q += this._getQueryOfJoinDef(joinDef);
|
|
658
|
+
q += "\n";
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
q += "SET";
|
|
662
|
+
q += "\n";
|
|
663
|
+
}
|
|
664
|
+
else {
|
|
665
|
+
q += ` ${def.as} SET`;
|
|
666
|
+
q += "\n";
|
|
667
|
+
}
|
|
668
|
+
// FIELD = VALUE
|
|
669
|
+
q += Object.keys(def.record).map((key) => ` ${this._dialect === "sqlite" ? "" : def.as + "."}${key} = ${this.getQueryOfQueryValue(def.record[key])}`).join(",\n");
|
|
670
|
+
q += "\n";
|
|
671
|
+
// OUTPUT
|
|
672
|
+
if (this._dialect === "mssql" || this._dialect === "mssql-azure") {
|
|
673
|
+
if (def.output) {
|
|
674
|
+
q += `OUTPUT ${def.output.map((item) => "INSERTED." + item).join(", ")}`;
|
|
675
|
+
q += "\n";
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
if (this._dialect === "mssql" || this._dialect === "mssql-azure") {
|
|
679
|
+
// FROM, AS
|
|
680
|
+
q += `FROM ${def.from} as ${def.as}`;
|
|
681
|
+
q += "\n";
|
|
682
|
+
// JOIN
|
|
683
|
+
if (def.join && def.join.length > 0) {
|
|
684
|
+
for (const joinDef of def.join) {
|
|
685
|
+
q += this._getQueryOfJoinDef(joinDef);
|
|
686
|
+
q += "\n";
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
// WHERE
|
|
691
|
+
if (def.where) {
|
|
692
|
+
q += `WHERE ${def.where.map((item) => this.getQueryOfQueryValue(item)).join("")}`;
|
|
693
|
+
q += "\n";
|
|
694
|
+
}
|
|
695
|
+
if (this._dialect !== "mssql" && this._dialect !== "mssql-azure") {
|
|
696
|
+
if (def.top !== undefined) {
|
|
697
|
+
q += `LIMIT ${def.top}`;
|
|
698
|
+
q += "\n";
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
if (this._dialect === "sqlite") {
|
|
702
|
+
if (def.output) {
|
|
703
|
+
q += `RETURNING ${def.output.join(", ")}`;
|
|
704
|
+
q += "\n";
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
return q.trim() + ";";
|
|
708
|
+
}
|
|
709
|
+
insertIfNotExists(def) {
|
|
710
|
+
if (this._dialect === "mysql") {
|
|
711
|
+
throw new Error("MYSQL 미구현");
|
|
712
|
+
}
|
|
713
|
+
else {
|
|
714
|
+
let q = "";
|
|
715
|
+
// LINE 1
|
|
716
|
+
q += `MERGE ${def.from} as ${def.as}`;
|
|
717
|
+
q += "\n";
|
|
718
|
+
// USING
|
|
719
|
+
q += "USING (SELECT 0 as _using) as _using";
|
|
720
|
+
q += "\n";
|
|
721
|
+
// WHERE
|
|
722
|
+
q += `ON ${def.where.map((item) => this.getQueryOfQueryValue(item)).join("")}`;
|
|
723
|
+
q += "\n";
|
|
724
|
+
// INSERT
|
|
725
|
+
q += "WHEN NOT MATCHED THEN\n";
|
|
726
|
+
q += ` INSERT (${Object.keys(def.insertRecord).join(", ")})\n`;
|
|
727
|
+
q += ` VALUES (${Object.values(def.insertRecord).map((val) => this.getQueryOfQueryValue(val)).join(", ")})`;
|
|
728
|
+
q += "\n";
|
|
729
|
+
if (def.output) {
|
|
730
|
+
if (this._dialect === "sqlite") {
|
|
731
|
+
q += `RETURNING ${def.output.join(", ")}`;
|
|
732
|
+
q += "\n";
|
|
733
|
+
}
|
|
734
|
+
else {
|
|
735
|
+
q += `OUTPUT ${def.output.map((item) => "INSERTED." + item).join(", ")}`;
|
|
736
|
+
q += "\n";
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
return q.trim() + ";";
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
upsert(def) {
|
|
743
|
+
if (this._dialect === "sqlite") {
|
|
744
|
+
throw new Error("sqlite - upsert 미구현");
|
|
745
|
+
}
|
|
746
|
+
else if (this._dialect === "mysql") {
|
|
747
|
+
const procName = this.wrap("SD" + Uuid.new().toString().replace(/-/g, ""));
|
|
748
|
+
const q = `
|
|
749
|
+
USE ${def.from.split(".")[0]};
|
|
750
|
+
|
|
751
|
+
CREATE PROCEDURE ${procName}()
|
|
752
|
+
proc_label:BEGIN
|
|
753
|
+
|
|
754
|
+
IF EXISTS (
|
|
755
|
+
${this.select(def).replace(/\n/g, "\n ")}
|
|
756
|
+
) THEN
|
|
757
|
+
|
|
758
|
+
${Object.keys(def.updateRecord).length > 0 ? this.update({ ...def, record: def.updateRecord }) : "LEAVE proc_label;"}
|
|
759
|
+
|
|
760
|
+
ELSE
|
|
761
|
+
|
|
762
|
+
${Object.keys(def.insertRecord).length > 0 ? this.insert({ ...def, record: def.insertRecord }) : "LEAVE proc_label;"}
|
|
763
|
+
|
|
764
|
+
END IF;
|
|
765
|
+
|
|
766
|
+
END;
|
|
767
|
+
CALL ${procName};
|
|
768
|
+
DROP PROCEDURE ${procName};`;
|
|
769
|
+
return q.trim() + ";";
|
|
770
|
+
}
|
|
771
|
+
else {
|
|
772
|
+
let q = "";
|
|
773
|
+
// LINE 1
|
|
774
|
+
q += `MERGE ${def.from} as ${def.as}`;
|
|
775
|
+
q += "\n";
|
|
776
|
+
// USING
|
|
777
|
+
q += "USING (SELECT 0 as _using) as _using";
|
|
778
|
+
q += "\n";
|
|
779
|
+
// WHERE
|
|
780
|
+
q += `ON ${def.where.map((item) => this.getQueryOfQueryValue(item)).join("")}`;
|
|
781
|
+
q += "\n";
|
|
782
|
+
// UPDATE
|
|
783
|
+
if (typeof def.updateRecord !== "undefined" && Object.keys(def.updateRecord).length > 0) {
|
|
784
|
+
q += "WHEN MATCHED THEN\n";
|
|
785
|
+
q += " UPDATE SET\n";
|
|
786
|
+
q += Object.keys(def.updateRecord).map((key) => ` ${key} = ${this.getQueryOfQueryValue(def.updateRecord[key])}`).join(",\n");
|
|
787
|
+
q += "\n";
|
|
788
|
+
}
|
|
789
|
+
// INSERT
|
|
790
|
+
q += "WHEN NOT MATCHED THEN\n";
|
|
791
|
+
q += ` INSERT (${Object.keys(def.insertRecord).join(", ")})\n`;
|
|
792
|
+
q += ` VALUES (${Object.values(def.insertRecord).map((val) => this.getQueryOfQueryValue(val)).join(", ")})`;
|
|
793
|
+
q += "\n";
|
|
794
|
+
if (def.output) {
|
|
795
|
+
q += `OUTPUT ${def.output.map((item) => "INSERTED." + item).join(", ")}`;
|
|
796
|
+
q += "\n";
|
|
797
|
+
}
|
|
798
|
+
return q.trim() + ";";
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
delete(def) {
|
|
802
|
+
if (def.as === undefined)
|
|
803
|
+
throw new NeverEntryError();
|
|
804
|
+
if (this._dialect === "mysql") {
|
|
805
|
+
// TODO: 일반적인 경우엔 그냥 DELETE 쿼리 사용
|
|
806
|
+
return `
|
|
807
|
+
USE ${def.from.split(".")[0]};
|
|
808
|
+
|
|
809
|
+
SET foreign_key_checks=0;
|
|
810
|
+
|
|
811
|
+
SET @cols = NULL;
|
|
812
|
+
|
|
813
|
+
SELECT GROUP_CONCAT('${"`_" + def.as.slice(1)}.\`', COLUMN_NAME, '\`', ' = ', '${def.as}.\`', COLUMN_NAME, '\`' separator ' AND ') INTO @cols
|
|
814
|
+
FROM INFORMATION_SCHEMA.COLUMNS
|
|
815
|
+
WHERE CONCAT('\`', TABLE_SCHEMA, '\`.\`', TABLE_NAME, '\`') = '${def.from}' AND COLUMN_KEY='PRI';
|
|
816
|
+
|
|
817
|
+
SET @sql = CONCAT('${`DELETE ${def.as} FROM ${def.from} as ${def.as} JOIN (
|
|
818
|
+
${this.select(def).replace(/\n/g, "\n ").replace("*", def.as + ".*")}
|
|
819
|
+
) ${"`_" + def.as.slice(1)} ON 1 = 1 WHERE `.replace(/'/g, "''")}', @cols, ';');
|
|
820
|
+
SELECT @sql;
|
|
821
|
+
|
|
822
|
+
PREPARE stmt FROM @sql;
|
|
823
|
+
EXECUTE stmt;
|
|
824
|
+
DEALLOCATE PREPARE stmt;
|
|
825
|
+
|
|
826
|
+
SET foreign_key_checks=1;`.trim();
|
|
827
|
+
}
|
|
828
|
+
else {
|
|
829
|
+
if (this._dialect === "sqlite") {
|
|
830
|
+
if (def.join && def.join.length > 0) {
|
|
831
|
+
throw new Error("sqlite - update - join 미구현");
|
|
832
|
+
}
|
|
833
|
+
else if (def.limit || def.top !== undefined) {
|
|
834
|
+
throw new Error("sqlite - update - limit, top 미구현");
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
let q = "";
|
|
838
|
+
// LINE 1
|
|
839
|
+
q += "DELETE";
|
|
840
|
+
if (def.top !== undefined) {
|
|
841
|
+
q += ` TOP (${def.top})`;
|
|
842
|
+
}
|
|
843
|
+
q += "\n";
|
|
844
|
+
if (this._dialect !== "sqlite") {
|
|
845
|
+
q += ` ${def.as}`;
|
|
846
|
+
q += "\n";
|
|
847
|
+
}
|
|
848
|
+
// OUTPUT
|
|
849
|
+
if (def.output) {
|
|
850
|
+
if (this._dialect === "sqlite") {
|
|
851
|
+
q += `RETURNING ${def.output.map((item) => "DELETED." + item).join(", ")}`;
|
|
852
|
+
q += "\n";
|
|
853
|
+
}
|
|
854
|
+
else {
|
|
855
|
+
q += `OUTPUT ${def.output.map((item) => "DELETED." + item).join(", ")}`;
|
|
856
|
+
q += "\n";
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
// FROM, AS
|
|
860
|
+
q += `FROM ${def.from} as ${def.as}`;
|
|
861
|
+
q += "\n";
|
|
862
|
+
// JOIN
|
|
863
|
+
if (def.join && def.join.length > 0) {
|
|
864
|
+
for (const joinDef of def.join) {
|
|
865
|
+
q += this._getQueryOfJoinDef(joinDef);
|
|
866
|
+
q += "\n";
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
// WHERE
|
|
870
|
+
if (def.where) {
|
|
871
|
+
q += `WHERE ${def.where.map((item) => this.getQueryOfQueryValue(item)).join("")}`;
|
|
872
|
+
q += "\n";
|
|
873
|
+
}
|
|
874
|
+
return q.trim() + ";";
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
truncateTable(def) {
|
|
878
|
+
const tableName = this.getTableName(def.table);
|
|
879
|
+
return `TRUNCATE TABLE ${tableName}`;
|
|
880
|
+
}
|
|
881
|
+
// endregion
|
|
882
|
+
// ----------------------------------------------------
|
|
883
|
+
// HELPERS
|
|
884
|
+
// ----------------------------------------------------
|
|
885
|
+
// region HELPERS
|
|
886
|
+
query(def) {
|
|
887
|
+
return this[def.type](def);
|
|
888
|
+
}
|
|
889
|
+
wrap(name) {
|
|
890
|
+
return this._dialect === "mysql" ? "`" + name + "`"
|
|
891
|
+
: "[" + name + "]";
|
|
892
|
+
}
|
|
893
|
+
getTableName(def) {
|
|
894
|
+
return this.getTableNameChain(def).map((item) => this.wrap(item)).join(".");
|
|
895
|
+
}
|
|
896
|
+
getTableNameWithoutDatabase(def) {
|
|
897
|
+
return this.getTableNameChain(def).slice(1).map((item) => this.wrap(item)).join(".");
|
|
898
|
+
}
|
|
899
|
+
getTableNameChain(def) {
|
|
900
|
+
if (this._dialect === "mysql") {
|
|
901
|
+
if (def.database !== undefined) {
|
|
902
|
+
return [def.database, def.name];
|
|
903
|
+
}
|
|
904
|
+
else {
|
|
905
|
+
return [def.name];
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
else if (this._dialect === "mssql-azure") {
|
|
909
|
+
if (def.schema !== undefined) {
|
|
910
|
+
return [def.schema, def.name];
|
|
911
|
+
}
|
|
912
|
+
else {
|
|
913
|
+
return [def.name];
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
else {
|
|
917
|
+
if (def.database !== undefined) {
|
|
918
|
+
if (def.schema === undefined) {
|
|
919
|
+
throw new Error(`SCHEMA가 지정되어있지 않습니다. (DB: ${def.database}, TABLE: ${def.name})`);
|
|
920
|
+
}
|
|
921
|
+
return [def.database, def.schema, def.name];
|
|
922
|
+
}
|
|
923
|
+
else if (def.schema !== undefined) {
|
|
924
|
+
return [def.schema, def.name];
|
|
925
|
+
}
|
|
926
|
+
else {
|
|
927
|
+
return [def.name];
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
getQueryOfQueryValue(queryValue) {
|
|
932
|
+
if (queryValue instanceof Array) {
|
|
933
|
+
return "(" + queryValue.map((item) => this.getQueryOfQueryValue(item)).join("") + ")";
|
|
934
|
+
}
|
|
935
|
+
else if (queryValue["from"] !== undefined) {
|
|
936
|
+
let subQuery = "(\n";
|
|
937
|
+
subQuery += " " + this.select(queryValue).replace(/\n/g, "\n ") + "\n";
|
|
938
|
+
subQuery += ")";
|
|
939
|
+
return subQuery;
|
|
940
|
+
}
|
|
941
|
+
else {
|
|
942
|
+
return queryValue;
|
|
943
|
+
}
|
|
944
|
+
}
|
|
945
|
+
_getQueryOfColDef(colDef) {
|
|
946
|
+
let q = "";
|
|
947
|
+
if (this._dialect === "sqlite") {
|
|
948
|
+
q += this.wrap(colDef.name) + " ";
|
|
949
|
+
q += this.qh.type(colDef.dataType) + " ";
|
|
950
|
+
q += colDef.pkOrderBy ? `PRIMARY KEY ${colDef.pkOrderBy} ` : "";
|
|
951
|
+
q += colDef.autoIncrement ? this.qh.type(colDef.dataType) === "UNIQUEIDENTIFIER" ? "default NEWID() " : "AUTOINCREMENT " : "";
|
|
952
|
+
q += colDef.autoIncrement ? "" : colDef.nullable ? "NULL " : "NOT NULL ";
|
|
953
|
+
}
|
|
954
|
+
else if (this._dialect === "mysql") {
|
|
955
|
+
q += this.wrap(colDef.name) + " ";
|
|
956
|
+
q += this.qh.type(colDef.dataType) + " ";
|
|
957
|
+
q += colDef.nullable ? "NULL " : "NOT NULL ";
|
|
958
|
+
q += colDef.autoIncrement ? this.qh.type(colDef.dataType) === "CHAR(38)" ? "default (REPLACE(UUID(), '-', '')) " : "AUTO_INCREMENT" : "";
|
|
959
|
+
}
|
|
960
|
+
else {
|
|
961
|
+
q += this.wrap(colDef.name) + " ";
|
|
962
|
+
q += this.qh.type(colDef.dataType) + " ";
|
|
963
|
+
q += colDef.autoIncrement ? this.qh.type(colDef.dataType) === "UNIQUEIDENTIFIER" ? "default NEWID() " : "IDENTITY(1,1) " : "";
|
|
964
|
+
q += colDef.nullable ? "NULL" : "NOT NULL";
|
|
965
|
+
}
|
|
966
|
+
return q.trim();
|
|
967
|
+
}
|
|
968
|
+
_getQueryOfJoinDef(def) {
|
|
969
|
+
let q = "";
|
|
970
|
+
if (Object.keys(def).every((key) => def[key] === undefined || (["from", "as", "where", "select", "isCustomSelect"].includes(key))) && !def.isCustomSelect) {
|
|
971
|
+
q += "LEFT OUTER JOIN ";
|
|
972
|
+
if (def.from instanceof Array) {
|
|
973
|
+
if (def.as === undefined)
|
|
974
|
+
throw new NeverEntryError();
|
|
975
|
+
q += "(\n";
|
|
976
|
+
for (const from of def.from) {
|
|
977
|
+
q += " " + this.select(from).replace(/\n/g, "\n ");
|
|
978
|
+
q += "\n\n UNION ALL\n\n";
|
|
979
|
+
}
|
|
980
|
+
q = q.slice(0, -14);
|
|
981
|
+
q += `) as ${def.as}`;
|
|
982
|
+
}
|
|
983
|
+
else if (def.from?.["from"] !== undefined) {
|
|
984
|
+
if (def.as === undefined)
|
|
985
|
+
throw new NeverEntryError();
|
|
986
|
+
q += "(\n";
|
|
987
|
+
q += " " + this.select(def.from).replace(/\n/g, "\n ") + "\n";
|
|
988
|
+
q += `) as ${def.as}`;
|
|
989
|
+
}
|
|
990
|
+
else {
|
|
991
|
+
if (def.as === undefined)
|
|
992
|
+
throw new NeverEntryError();
|
|
993
|
+
q += `${def.from} as ${def.as}`;
|
|
994
|
+
}
|
|
995
|
+
if (def.where) {
|
|
996
|
+
q += ` ON ${def.where.map((item) => this.getQueryOfQueryValue(item)).join("")}`;
|
|
997
|
+
}
|
|
998
|
+
else {
|
|
999
|
+
q += " ON 1 = 1";
|
|
1000
|
+
}
|
|
1001
|
+
}
|
|
1002
|
+
else {
|
|
1003
|
+
if (this._dialect === "sqlite") {
|
|
1004
|
+
q += "LEFT OUTER JOIN (\n";
|
|
1005
|
+
q += " " + this.select(def).replace(/\n/g, "\n ") + "\n";
|
|
1006
|
+
q += ") as " + def.as;
|
|
1007
|
+
}
|
|
1008
|
+
else if (this._dialect === "mssql" || this._dialect === "mssql-azure") {
|
|
1009
|
+
q += "OUTER APPLY (\n";
|
|
1010
|
+
q += " " + this.select(def).replace(/\n/g, "\n ") + "\n";
|
|
1011
|
+
q += ") as " + def.as;
|
|
1012
|
+
}
|
|
1013
|
+
else {
|
|
1014
|
+
q += "LEFT OUTER JOIN LATERAL (\n";
|
|
1015
|
+
q += " " + this.select(def).replace(/\n/g, "\n ") + "\n";
|
|
1016
|
+
q += ") as " + def.as + " ON 1 = 1";
|
|
1017
|
+
}
|
|
1018
|
+
}
|
|
1019
|
+
return q.trim();
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
//# sourceMappingURL=QueryBuilder.js.map
|