typeorm 0.3.29-dev.cc07c90 → 0.3.30
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/README.md +2 -2
- package/browser/cache/RedisQueryResultCache.d.ts +6 -9
- package/browser/cache/RedisQueryResultCache.js +21 -42
- package/browser/cache/RedisQueryResultCache.js.map +1 -1
- package/browser/cli-ts-node-commonjs.js +0 -0
- package/browser/cli-ts-node-esm.js +0 -0
- package/browser/driver/aurora-mysql/AuroraMysqlDriver.js +18 -5
- package/browser/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachDriver.d.ts +2 -2
- package/browser/driver/cockroachdb/CockroachDriver.js +13 -3
- package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.js +22 -16
- package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/browser/driver/mysql/MysqlDriver.js +18 -5
- package/browser/driver/mysql/MysqlDriver.js.map +1 -1
- package/browser/driver/oracle/OracleDriver.d.ts +2 -2
- package/browser/driver/oracle/OracleDriver.js +8 -5
- package/browser/driver/oracle/OracleDriver.js.map +1 -1
- package/browser/driver/postgres/PostgresDriver.d.ts +2 -2
- package/browser/driver/postgres/PostgresDriver.js +18 -5
- package/browser/driver/postgres/PostgresDriver.js.map +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.js +16 -10
- package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/browser/driver/sap/SapConnectionOptions.d.ts +8 -1
- package/browser/driver/sap/SapConnectionOptions.js.map +1 -1
- package/browser/driver/sap/SapDriver.js +4 -8
- package/browser/driver/sap/SapDriver.js.map +1 -1
- package/browser/driver/spanner/SpannerDriver.d.ts +2 -2
- package/browser/driver/spanner/SpannerDriver.js +1 -1
- package/browser/driver/spanner/SpannerDriver.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerDriver.d.ts +2 -2
- package/browser/driver/sqlserver/SqlServerDriver.js +1 -1
- package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.js +4 -2
- package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/browser/entity-manager/EntityManager.d.ts +3 -2
- package/browser/entity-manager/EntityManager.js +32 -18
- package/browser/entity-manager/EntityManager.js.map +1 -1
- package/browser/error/QueryFailedError.js +1 -2
- package/browser/error/QueryFailedError.js.map +1 -1
- package/browser/find-options/operator/JsonContains.d.ts +1 -1
- package/browser/find-options/operator/JsonContains.js.map +1 -1
- package/browser/index.d.ts +3 -0
- package/browser/index.js +1 -0
- package/browser/index.js.map +1 -1
- package/browser/metadata-builder/ClosureJunctionEntityMetadataBuilder.js +2 -0
- package/browser/metadata-builder/ClosureJunctionEntityMetadataBuilder.js.map +1 -1
- package/browser/metadata-builder/RelationJoinColumnBuilder.d.ts +11 -5
- package/browser/metadata-builder/RelationJoinColumnBuilder.js +11 -5
- package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
- package/browser/migration/MigrationExecutor.d.ts +3 -1
- package/browser/migration/MigrationExecutor.js +13 -3
- package/browser/migration/MigrationExecutor.js.map +1 -1
- package/browser/persistence/SubjectChangedColumnsComputer.js +6 -2
- package/browser/persistence/SubjectChangedColumnsComputer.js.map +1 -1
- package/browser/persistence/SubjectExecutor.d.ts +3 -0
- package/browser/persistence/SubjectExecutor.js +11 -0
- package/browser/persistence/SubjectExecutor.js.map +1 -1
- package/browser/query-builder/QueryBuilder.d.ts +8 -0
- package/browser/query-builder/QueryBuilder.js +42 -24
- package/browser/query-builder/QueryBuilder.js.map +1 -1
- package/browser/query-builder/ReturningOption.d.ts +4 -0
- package/browser/query-builder/ReturningOption.js +3 -0
- package/browser/query-builder/ReturningOption.js.map +1 -0
- package/browser/query-builder/SelectQueryBuilder.d.ts +1 -5
- package/browser/query-builder/SelectQueryBuilder.js +48 -54
- package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
- package/browser/query-builder/SoftDeleteQueryBuilder.js +17 -12
- package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/browser/query-builder/UpdateQueryBuilder.js +17 -12
- package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/browser/repository/BaseEntity.d.ts +2 -1
- package/browser/repository/BaseEntity.js +2 -2
- package/browser/repository/BaseEntity.js.map +1 -1
- package/browser/repository/Repository.d.ts +3 -2
- package/browser/repository/Repository.js +4 -4
- package/browser/repository/Repository.js.map +1 -1
- package/browser/repository/TreeRepository.js +2 -2
- package/browser/repository/TreeRepository.js.map +1 -1
- package/browser/repository/UpdateOptions.d.ts +11 -0
- package/browser/repository/UpdateOptions.js +3 -0
- package/browser/repository/UpdateOptions.js.map +1 -0
- package/browser/repository/UpsertOptions.d.ts +6 -0
- package/browser/repository/UpsertOptions.js.map +1 -1
- package/browser/schema-builder/RdbmsSchemaBuilder.js +1 -1
- package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/browser/util/OrmUtils.d.ts +13 -0
- package/browser/util/OrmUtils.js +53 -0
- package/browser/util/OrmUtils.js.map +1 -1
- package/cache/RedisQueryResultCache.d.ts +6 -9
- package/cache/RedisQueryResultCache.js +21 -42
- package/cache/RedisQueryResultCache.js.map +1 -1
- package/commands/InitCommand.js +1 -1
- package/commands/MigrationRunCommand.js +4 -4
- package/commands/MigrationRunCommand.js.map +1 -1
- package/driver/aurora-mysql/AuroraMysqlDriver.js +18 -5
- package/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
- package/driver/cockroachdb/CockroachDriver.d.ts +2 -2
- package/driver/cockroachdb/CockroachDriver.js +13 -3
- package/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/driver/cockroachdb/CockroachQueryRunner.js +22 -16
- package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/driver/mysql/MysqlDriver.js +18 -5
- package/driver/mysql/MysqlDriver.js.map +1 -1
- package/driver/oracle/OracleDriver.d.ts +2 -2
- package/driver/oracle/OracleDriver.js +8 -5
- package/driver/oracle/OracleDriver.js.map +1 -1
- package/driver/postgres/PostgresDriver.d.ts +2 -2
- package/driver/postgres/PostgresDriver.js +18 -5
- package/driver/postgres/PostgresDriver.js.map +1 -1
- package/driver/postgres/PostgresQueryRunner.js +16 -10
- package/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/driver/sap/SapConnectionOptions.d.ts +8 -1
- package/driver/sap/SapConnectionOptions.js.map +1 -1
- package/driver/sap/SapDriver.js +4 -8
- package/driver/sap/SapDriver.js.map +1 -1
- package/driver/spanner/SpannerDriver.d.ts +2 -2
- package/driver/spanner/SpannerDriver.js +1 -1
- package/driver/spanner/SpannerDriver.js.map +1 -1
- package/driver/sqlserver/SqlServerDriver.d.ts +2 -2
- package/driver/sqlserver/SqlServerDriver.js +1 -1
- package/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/driver/sqlserver/SqlServerQueryRunner.js +4 -2
- package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/entity-manager/EntityManager.d.ts +3 -2
- package/entity-manager/EntityManager.js +32 -18
- package/entity-manager/EntityManager.js.map +1 -1
- package/error/QueryFailedError.js +1 -2
- package/error/QueryFailedError.js.map +1 -1
- package/find-options/operator/JsonContains.d.ts +1 -1
- package/find-options/operator/JsonContains.js.map +1 -1
- package/index.d.ts +3 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/metadata-builder/ClosureJunctionEntityMetadataBuilder.js +2 -0
- package/metadata-builder/ClosureJunctionEntityMetadataBuilder.js.map +1 -1
- package/metadata-builder/RelationJoinColumnBuilder.d.ts +11 -5
- package/metadata-builder/RelationJoinColumnBuilder.js +11 -5
- package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
- package/migration/MigrationExecutor.d.ts +3 -1
- package/migration/MigrationExecutor.js +13 -3
- package/migration/MigrationExecutor.js.map +1 -1
- package/package.json +278 -1
- package/persistence/SubjectChangedColumnsComputer.js +6 -2
- package/persistence/SubjectChangedColumnsComputer.js.map +1 -1
- package/persistence/SubjectExecutor.d.ts +3 -0
- package/persistence/SubjectExecutor.js +11 -0
- package/persistence/SubjectExecutor.js.map +1 -1
- package/query-builder/QueryBuilder.d.ts +8 -0
- package/query-builder/QueryBuilder.js +42 -24
- package/query-builder/QueryBuilder.js.map +1 -1
- package/query-builder/ReturningOption.d.ts +4 -0
- package/query-builder/ReturningOption.js +4 -0
- package/query-builder/ReturningOption.js.map +1 -0
- package/query-builder/SelectQueryBuilder.d.ts +1 -5
- package/query-builder/SelectQueryBuilder.js +48 -54
- package/query-builder/SelectQueryBuilder.js.map +1 -1
- package/query-builder/SoftDeleteQueryBuilder.js +17 -12
- package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/query-builder/UpdateQueryBuilder.js +17 -12
- package/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/repository/BaseEntity.d.ts +2 -1
- package/repository/BaseEntity.js +2 -2
- package/repository/BaseEntity.js.map +1 -1
- package/repository/Repository.d.ts +3 -2
- package/repository/Repository.js +4 -4
- package/repository/Repository.js.map +1 -1
- package/repository/TreeRepository.js +2 -2
- package/repository/TreeRepository.js.map +1 -1
- package/repository/UpdateOptions.d.ts +11 -0
- package/repository/UpdateOptions.js +4 -0
- package/repository/UpdateOptions.js.map +1 -0
- package/repository/UpsertOptions.d.ts +6 -0
- package/repository/UpsertOptions.js.map +1 -1
- package/schema-builder/RdbmsSchemaBuilder.js +1 -1
- package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/util/OrmUtils.d.ts +13 -0
- package/util/OrmUtils.js +53 -0
- package/util/OrmUtils.js.map +1 -1
package/package.json
CHANGED
|
@@ -1 +1,278 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"name": "typeorm",
|
|
3
|
+
"version": "0.3.30",
|
|
4
|
+
"description": "Data-Mapper ORM for TypeScript and ES2021+. Supports MySQL/MariaDB, PostgreSQL, MS SQL Server, Oracle, SAP HANA, SQLite, MongoDB databases.",
|
|
5
|
+
"homepage": "https://typeorm.io",
|
|
6
|
+
"bugs": {
|
|
7
|
+
"url": "https://github.com/typeorm/typeorm/issues"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/typeorm/typeorm.git"
|
|
12
|
+
},
|
|
13
|
+
"funding": "https://opencollective.com/typeorm",
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"author": {
|
|
16
|
+
"name": "TypeORM",
|
|
17
|
+
"email": "maintainers@typeorm.io"
|
|
18
|
+
},
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./index.d.ts",
|
|
22
|
+
"react-native": {
|
|
23
|
+
"default": "./browser/index.js"
|
|
24
|
+
},
|
|
25
|
+
"node": {
|
|
26
|
+
"types": "./index.d.ts",
|
|
27
|
+
"import": "./index.mjs",
|
|
28
|
+
"require": "./index.js"
|
|
29
|
+
},
|
|
30
|
+
"browser": {
|
|
31
|
+
"require": "./index.js",
|
|
32
|
+
"import": "./browser/index.js",
|
|
33
|
+
"default": "./index.js"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"./browser": {
|
|
37
|
+
"types": "./index.d.ts",
|
|
38
|
+
"default": "./browser/index.js"
|
|
39
|
+
},
|
|
40
|
+
"./*.js": "./*.js",
|
|
41
|
+
"./*": {
|
|
42
|
+
"require": "./*.js",
|
|
43
|
+
"import": "./*"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"main": "./index.js",
|
|
47
|
+
"module": "./index.mjs",
|
|
48
|
+
"browser": {
|
|
49
|
+
"./browser/connection/ConnectionOptionsReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js",
|
|
50
|
+
"./browser/connection/options-reader/ConnectionOptionsXmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js",
|
|
51
|
+
"./browser/connection/options-reader/ConnectionOptionsYmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js",
|
|
52
|
+
"./browser/driver/aurora-data-api/AuroraDataApiDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
|
|
53
|
+
"./browser/driver/better-sqlite3/BetterSqlite3Driver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
|
|
54
|
+
"./browser/driver/cockroachdb/CockroachDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
|
|
55
|
+
"./browser/driver/mongodb/MongoDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
|
|
56
|
+
"./browser/driver/mongodb/MongoQueryRunner.js": "./browser/platform/BrowserDisabledDriversDummy.js",
|
|
57
|
+
"./browser/driver/mongodb/bson.typings.js": "./browser/platform/BrowserDisabledDriversDummy.js",
|
|
58
|
+
"./browser/driver/mongodb/typings.js": "./browser/platform/BrowserDisabledDriversDummy.js",
|
|
59
|
+
"./browser/driver/mysql/MysqlDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
|
|
60
|
+
"./browser/driver/oracle/OracleDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
|
|
61
|
+
"./browser/driver/postgres/PostgresDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
|
|
62
|
+
"./browser/driver/sap/SapDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
|
|
63
|
+
"./browser/driver/sqlite/SqliteDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
|
|
64
|
+
"./browser/driver/sqlserver/SqlServerDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
|
|
65
|
+
"./browser/entity-manager/MongoEntityManager.js": "./browser/platform/BrowserDisabledDriversDummy.js",
|
|
66
|
+
"./browser/logger/FileLogger.js": "./browser/platform/BrowserFileLoggerDummy.js",
|
|
67
|
+
"./browser/platform/PlatformTools.js": "./browser/platform/BrowserPlatformTools.js",
|
|
68
|
+
"./browser/repository/MongoRepository.js": "./browser/platform/BrowserDisabledDriversDummy.js",
|
|
69
|
+
"./browser/util/DirectoryExportedClassesLoader.js": "./browser/platform/BrowserDirectoryExportedClassesLoader.js",
|
|
70
|
+
"./index.js": "./browser/index.js",
|
|
71
|
+
"./index.mjs": "./browser/index.js"
|
|
72
|
+
},
|
|
73
|
+
"types": "./index.d.ts",
|
|
74
|
+
"bin": {
|
|
75
|
+
"typeorm": "./cli.js",
|
|
76
|
+
"typeorm-ts-node-commonjs": "./cli-ts-node-commonjs.js",
|
|
77
|
+
"typeorm-ts-node-esm": "./cli-ts-node-esm.js"
|
|
78
|
+
},
|
|
79
|
+
"dependencies": {
|
|
80
|
+
"@sqltools/formatter": "^1.2.5",
|
|
81
|
+
"ansis": "^4.2.0",
|
|
82
|
+
"app-root-path": "^3.1.0",
|
|
83
|
+
"buffer": "^6.0.3",
|
|
84
|
+
"dayjs": "^1.11.20",
|
|
85
|
+
"debug": "^4.4.3",
|
|
86
|
+
"dedent": "^1.7.2",
|
|
87
|
+
"dotenv": "^16.6.1",
|
|
88
|
+
"glob": "^10.5.0",
|
|
89
|
+
"reflect-metadata": "^0.2.2",
|
|
90
|
+
"sha.js": "^2.4.12",
|
|
91
|
+
"sql-highlight": "^6.1.0",
|
|
92
|
+
"tslib": "^2.8.1",
|
|
93
|
+
"uuid": "^11.1.1",
|
|
94
|
+
"yargs": "^17.7.2"
|
|
95
|
+
},
|
|
96
|
+
"devDependencies": {
|
|
97
|
+
"@eslint/js": "^9.39.4",
|
|
98
|
+
"@google-cloud/spanner": "^8.7.1",
|
|
99
|
+
"@sap/hana-client": "^2.28.20",
|
|
100
|
+
"@tsconfig/node16": "^16.1.8",
|
|
101
|
+
"@types/chai": "^4.3.20",
|
|
102
|
+
"@types/chai-as-promised": "^7.1.8",
|
|
103
|
+
"@types/debug": "^4.1.13",
|
|
104
|
+
"@types/gulp": "^4.0.18",
|
|
105
|
+
"@types/gulp-rename": "^2.0.7",
|
|
106
|
+
"@types/gulp-sourcemaps": "^0.0.38",
|
|
107
|
+
"@types/mocha": "^10.0.10",
|
|
108
|
+
"@types/node": "^16.18.126",
|
|
109
|
+
"@types/sha.js": "^2.4.4",
|
|
110
|
+
"@types/sinon": "^10.0.20",
|
|
111
|
+
"@types/sinon-chai": "^3.2.12",
|
|
112
|
+
"@types/source-map-support": "^0.5.10",
|
|
113
|
+
"@types/yargs": "^17.0.35",
|
|
114
|
+
"better-sqlite3": "^8.7.0",
|
|
115
|
+
"c8": "^10.1.3",
|
|
116
|
+
"chai": "^4.5.0",
|
|
117
|
+
"chai-as-promised": "^7.1.2",
|
|
118
|
+
"class-transformer": "^0.5.1",
|
|
119
|
+
"eslint": "^9.39.4",
|
|
120
|
+
"eslint-plugin-chai-friendly": "^1.2.0",
|
|
121
|
+
"eslint-plugin-jsdoc": "^62.9.0",
|
|
122
|
+
"globals": "^17.6.0",
|
|
123
|
+
"gulp": "^4.0.2",
|
|
124
|
+
"gulp-rename": "^2.1.0",
|
|
125
|
+
"gulp-replace": "^1.1.4",
|
|
126
|
+
"gulp-shell": "^0.8.0",
|
|
127
|
+
"gulp-sourcemaps": "^3.0.0",
|
|
128
|
+
"gulp-typescript": "6.0.0-alpha.1",
|
|
129
|
+
"gulpclass": "^0.2.0",
|
|
130
|
+
"husky": "^9.1.7",
|
|
131
|
+
"is-ci": "^4.1.0",
|
|
132
|
+
"lint-staged": "^16.4.0",
|
|
133
|
+
"mocha": "^11.7.5",
|
|
134
|
+
"mongodb": "^6.21.0",
|
|
135
|
+
"mssql": "^12.5.2",
|
|
136
|
+
"mysql": "^2.18.1",
|
|
137
|
+
"mysql2": "^3.22.3",
|
|
138
|
+
"oracledb": "^6.10.0",
|
|
139
|
+
"pg": "^8.20.0",
|
|
140
|
+
"pg-query-stream": "^4.14.0",
|
|
141
|
+
"pkg-pr-new": "^0.0.71",
|
|
142
|
+
"prettier": "^2.8.8",
|
|
143
|
+
"redis": "^5.12.1",
|
|
144
|
+
"rimraf": "^5.0.10",
|
|
145
|
+
"sinon": "^16.1.3",
|
|
146
|
+
"sinon-chai": "^3.7.0",
|
|
147
|
+
"sort-package-json": "^2.15.1",
|
|
148
|
+
"source-map-support": "^0.5.21",
|
|
149
|
+
"sql.js": "^1.14.1",
|
|
150
|
+
"sqlite3": "^5.1.7",
|
|
151
|
+
"standard-changelog": "^7.0.1",
|
|
152
|
+
"ts-node": "^10.9.2",
|
|
153
|
+
"typescript": "^5.9.3",
|
|
154
|
+
"typescript-eslint": "^8.59.2"
|
|
155
|
+
},
|
|
156
|
+
"peerDependencies": {
|
|
157
|
+
"@google-cloud/spanner": "^5.18.0 || ^6.0.0 || ^7.0.0 || ^8.0.0",
|
|
158
|
+
"@sap/hana-client": "^2.14.22",
|
|
159
|
+
"better-sqlite3": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0",
|
|
160
|
+
"ioredis": "^5.0.4",
|
|
161
|
+
"mongodb": "^5.8.0 || ^6.0.0",
|
|
162
|
+
"mssql": "^9.1.1 || ^10.0.0 || ^11.0.0 || ^12.0.0",
|
|
163
|
+
"mysql2": "^2.2.5 || ^3.0.1",
|
|
164
|
+
"oracledb": "^6.3.0",
|
|
165
|
+
"pg": "^8.5.1",
|
|
166
|
+
"pg-native": "^3.0.0",
|
|
167
|
+
"pg-query-stream": "^4.0.0",
|
|
168
|
+
"redis": "^3.1.1 || ^4.0.0 || ^5.0.14",
|
|
169
|
+
"sql.js": "^1.4.0",
|
|
170
|
+
"sqlite3": "^5.0.3",
|
|
171
|
+
"ts-node": "^10.7.0",
|
|
172
|
+
"typeorm-aurora-data-api-driver": "^2.0.0 || ^3.0.0"
|
|
173
|
+
},
|
|
174
|
+
"peerDependenciesMeta": {
|
|
175
|
+
"@google-cloud/spanner": {
|
|
176
|
+
"optional": true
|
|
177
|
+
},
|
|
178
|
+
"@sap/hana-client": {
|
|
179
|
+
"optional": true
|
|
180
|
+
},
|
|
181
|
+
"better-sqlite3": {
|
|
182
|
+
"optional": true
|
|
183
|
+
},
|
|
184
|
+
"ioredis": {
|
|
185
|
+
"optional": true
|
|
186
|
+
},
|
|
187
|
+
"mongodb": {
|
|
188
|
+
"optional": true
|
|
189
|
+
},
|
|
190
|
+
"mssql": {
|
|
191
|
+
"optional": true
|
|
192
|
+
},
|
|
193
|
+
"mysql2": {
|
|
194
|
+
"optional": true
|
|
195
|
+
},
|
|
196
|
+
"oracledb": {
|
|
197
|
+
"optional": true
|
|
198
|
+
},
|
|
199
|
+
"pg": {
|
|
200
|
+
"optional": true
|
|
201
|
+
},
|
|
202
|
+
"pg-native": {
|
|
203
|
+
"optional": true
|
|
204
|
+
},
|
|
205
|
+
"pg-query-stream": {
|
|
206
|
+
"optional": true
|
|
207
|
+
},
|
|
208
|
+
"redis": {
|
|
209
|
+
"optional": true
|
|
210
|
+
},
|
|
211
|
+
"sql.js": {
|
|
212
|
+
"optional": true
|
|
213
|
+
},
|
|
214
|
+
"sqlite3": {
|
|
215
|
+
"optional": true
|
|
216
|
+
},
|
|
217
|
+
"ts-node": {
|
|
218
|
+
"optional": true
|
|
219
|
+
},
|
|
220
|
+
"typeorm-aurora-data-api-driver": {
|
|
221
|
+
"optional": true
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
"engines": {
|
|
225
|
+
"node": ">=16.13.0"
|
|
226
|
+
},
|
|
227
|
+
"collective": {
|
|
228
|
+
"type": "opencollective",
|
|
229
|
+
"url": "https://opencollective.com/typeorm",
|
|
230
|
+
"logo": "https://opencollective.com/opencollective/logo.txt"
|
|
231
|
+
},
|
|
232
|
+
"devEngines": {
|
|
233
|
+
"packageManager": {
|
|
234
|
+
"name": "pnpm",
|
|
235
|
+
"version": "^10.26.2",
|
|
236
|
+
"onFail": "error"
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
"readmeFilename": "README.md",
|
|
240
|
+
"tags": [
|
|
241
|
+
"orm",
|
|
242
|
+
"typescript",
|
|
243
|
+
"typescript-orm",
|
|
244
|
+
"mariadb",
|
|
245
|
+
"mariadb-orm",
|
|
246
|
+
"mysql",
|
|
247
|
+
"mysql-orm",
|
|
248
|
+
"oracle",
|
|
249
|
+
"oracle-orm",
|
|
250
|
+
"postgresql",
|
|
251
|
+
"postgresql-orm",
|
|
252
|
+
"sap-hana",
|
|
253
|
+
"sap-hana-orm",
|
|
254
|
+
"spanner",
|
|
255
|
+
"cloud-spanner",
|
|
256
|
+
"cloud-spanner-orm",
|
|
257
|
+
"sqlite",
|
|
258
|
+
"sqlite-orm",
|
|
259
|
+
"sql-server",
|
|
260
|
+
"sql-server-orm"
|
|
261
|
+
],
|
|
262
|
+
"scripts": {
|
|
263
|
+
"changelog": "standard-changelog",
|
|
264
|
+
"compile": "rimraf ./build && tsc",
|
|
265
|
+
"docs:dev": "cd docs && npm run start",
|
|
266
|
+
"format": "prettier --cache --write \"./**/*.ts\"",
|
|
267
|
+
"format:ci": "prettier --check \"./**/*.ts\"",
|
|
268
|
+
"lint": "eslint",
|
|
269
|
+
"pack": "gulp pack",
|
|
270
|
+
"package": "gulp package",
|
|
271
|
+
"publish:preview": "pkg-pr-new publish './build/package' --template='./sample/playground'",
|
|
272
|
+
"test": "pnpm run compile && pnpm run test:fast --",
|
|
273
|
+
"test:ci": "mocha --bail",
|
|
274
|
+
"test:fast": "mocha",
|
|
275
|
+
"typecheck": "tsc --noEmit",
|
|
276
|
+
"watch": "tsc --watch"
|
|
277
|
+
}
|
|
278
|
+
}
|
|
@@ -55,8 +55,12 @@ class SubjectChangedColumnsComputer {
|
|
|
55
55
|
const shouldTransformDatabaseEntity = column.type !== "json" && column.type !== "jsonb";
|
|
56
56
|
// get database value of the column
|
|
57
57
|
let databaseValue = column.getEntityValue(subject.databaseEntity, shouldTransformDatabaseEntity);
|
|
58
|
-
//
|
|
59
|
-
|
|
58
|
+
// Defer to computeDiffRelationalColumns only for auto-created
|
|
59
|
+
// join columns (propertyName matches the owning relation).
|
|
60
|
+
// User-defined columns that double as join columns must stay
|
|
61
|
+
// in the diff so their explicit entity value is never lost.
|
|
62
|
+
if (column.propertyName ===
|
|
63
|
+
column.relationMetadata?.propertyName) {
|
|
60
64
|
const value = column.relationMetadata.getEntityValue(subject.entity);
|
|
61
65
|
if (value !== null && value !== undefined)
|
|
62
66
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/persistence/SubjectChangedColumnsComputer.ts"],"names":[],"mappings":"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","file":"SubjectChangedColumnsComputer.js","sourcesContent":["import { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { ApplyValueTransformers } from \"../util/ApplyValueTransformers\"\nimport { DateUtils } from \"../util/DateUtils\"\nimport { ObjectUtils } from \"../util/ObjectUtils\"\nimport { OrmUtils } from \"../util/OrmUtils\"\nimport { Subject } from \"./Subject\"\n\n/**\n * Finds what columns are changed in the subject entities.\n */\nexport class SubjectChangedColumnsComputer {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Finds what columns are changed in the subject entities.\n */\n compute(subjects: Subject[]) {\n subjects.forEach((subject) => {\n this.computeDiffColumns(subject)\n this.computeDiffRelationalColumns(subjects, subject)\n })\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Differentiate columns from the updated entity and entity stored in the database.\n */\n protected computeDiffColumns(subject: Subject): void {\n // if there is no persisted entity then nothing to compute changed in it\n if (!subject.entity) return\n\n subject.metadata.columns.forEach((column) => {\n // ignore special columns\n if (\n column.isVirtual ||\n column.isDiscriminator // ||\n // column.isUpdateDate ||\n // column.isVersion ||\n // column.isCreateDate\n )\n return\n\n const changeMap = subject.changeMaps.find(\n (changeMap) => changeMap.column === column,\n )\n if (changeMap) {\n subject.changeMaps.splice(\n subject.changeMaps.indexOf(changeMap),\n 1,\n )\n }\n\n // get user provided value - column value from the user provided persisted entity\n const entityValue = column.getEntityValue(subject.entity!)\n\n // we don't perform operation over undefined properties (but we DO need null properties!)\n if (entityValue === undefined) return\n\n // if there is no database entity then all columns are treated as new, e.g. changed\n if (subject.databaseEntity) {\n // skip transform database value for json / jsonb for comparison later on\n const shouldTransformDatabaseEntity =\n column.type !== \"json\" && column.type !== \"jsonb\"\n\n // get database value of the column\n let databaseValue = column.getEntityValue(\n subject.databaseEntity,\n shouldTransformDatabaseEntity,\n )\n\n // filter out \"relational columns\" only in the case if there is a relation object in entity\n if (column.relationMetadata) {\n const value = column.relationMetadata.getEntityValue(\n subject.entity!,\n )\n if (value !== null && value !== undefined) return\n }\n let normalizedValue = entityValue\n // if both values are not null, normalize special values to make proper comparision\n if (entityValue !== null && databaseValue !== null) {\n switch (column.type) {\n case \"date\":\n normalizedValue = column.isArray\n ? entityValue.map((date: Date) =>\n DateUtils.mixedDateToDateString(date),\n )\n : DateUtils.mixedDateToDateString(entityValue)\n databaseValue = column.isArray\n ? databaseValue.map((date: Date) =>\n DateUtils.mixedDateToDateString(date),\n )\n : DateUtils.mixedDateToDateString(databaseValue)\n break\n\n case \"time\":\n case \"time with time zone\":\n case \"time without time zone\":\n case \"timetz\":\n normalizedValue = column.isArray\n ? entityValue.map((date: Date) =>\n DateUtils.mixedDateToTimeString(date),\n )\n : DateUtils.mixedDateToTimeString(entityValue)\n databaseValue = column.isArray\n ? databaseValue.map((date: Date) =>\n DateUtils.mixedDateToTimeString(date),\n )\n : DateUtils.mixedDateToTimeString(databaseValue)\n break\n\n case \"datetime\":\n case \"datetime2\":\n case Date:\n case \"timestamp\":\n case \"timestamp without time zone\":\n case \"timestamp with time zone\":\n case \"timestamp with local time zone\":\n case \"timestamptz\":\n normalizedValue = column.isArray\n ? entityValue.map((date: Date) =>\n DateUtils.mixedDateToUtcDatetimeString(\n date,\n ),\n )\n : DateUtils.mixedDateToUtcDatetimeString(\n entityValue,\n )\n\n databaseValue = column.isArray\n ? databaseValue.map((date: Date) =>\n DateUtils.mixedDateToUtcDatetimeString(\n date,\n ),\n )\n : DateUtils.mixedDateToUtcDatetimeString(\n databaseValue,\n )\n\n break\n\n case \"json\":\n case \"jsonb\":\n // JSON.stringify doesn't work because postgresql sorts jsonb before save.\n // If you try to save json '[{\"messages\": \"\", \"attribute Key\": \"\", \"level\":\"\"}] ' as jsonb,\n // then postgresql will save it as '[{\"level\": \"\", \"message\":\"\", \"attributeKey\": \"\"}]'\n if (\n OrmUtils.deepCompare(entityValue, databaseValue)\n )\n return\n break\n\n case \"simple-array\":\n normalizedValue =\n DateUtils.simpleArrayToString(entityValue)\n databaseValue =\n DateUtils.simpleArrayToString(databaseValue)\n break\n case \"simple-enum\":\n normalizedValue =\n DateUtils.simpleEnumToString(entityValue)\n databaseValue =\n DateUtils.simpleEnumToString(databaseValue)\n break\n case \"simple-json\":\n normalizedValue =\n DateUtils.simpleJsonToString(entityValue)\n databaseValue =\n DateUtils.simpleJsonToString(databaseValue)\n break\n }\n\n if (column.transformer) {\n normalizedValue = ApplyValueTransformers.transformTo(\n column.transformer,\n entityValue,\n )\n }\n }\n\n // if value is not changed - then do nothing\n if (column.isArray) {\n if (OrmUtils.deepCompare(normalizedValue, databaseValue))\n return\n } else if (\n Buffer.isBuffer(normalizedValue) &&\n Buffer.isBuffer(databaseValue)\n ) {\n if (normalizedValue.equals(databaseValue)) {\n return\n }\n } else {\n if (normalizedValue === databaseValue) return\n }\n }\n\n if (!subject.diffColumns.includes(column))\n subject.diffColumns.push(column)\n\n subject.changeMaps.push({\n column: column,\n value: entityValue,\n })\n })\n }\n\n /**\n * Difference columns of the owning one-to-one and many-to-one columns.\n */\n protected computeDiffRelationalColumns(\n allSubjects: Subject[],\n subject: Subject,\n ): void {\n // if there is no persisted entity then nothing to compute changed in it\n if (!subject.entity) return\n\n subject.metadata.relationsWithJoinColumns.forEach((relation) => {\n // get the related entity from the persisted entity\n let relatedEntity = relation.getEntityValue(subject.entity!)\n\n // we don't perform operation over undefined properties (but we DO need null properties!)\n if (relatedEntity === undefined) return\n\n // if there is no database entity then all relational columns are treated as new, e.g. changed\n if (subject.databaseEntity) {\n // here we cover two scenarios:\n // 1. related entity can be another entity which is natural way\n // 2. related entity can be just an entity id\n // if relation entity is just a relation id set (for example post.tag = 1)\n // then we create an id map from it to make a proper comparision\n let relatedEntityRelationIdMap: ObjectLiteral = relatedEntity\n if (\n relatedEntityRelationIdMap !== null &&\n ObjectUtils.isObject(relatedEntityRelationIdMap)\n )\n relatedEntityRelationIdMap = relation.getRelationIdMap(\n relatedEntityRelationIdMap,\n )!\n\n // get database related entity. Since loadRelationIds are used on databaseEntity\n // related entity will contain only its relation ids\n const databaseRelatedEntityRelationIdMap =\n relation.getEntityValue(subject.databaseEntity)\n\n // if relation ids are equal then we don't need to update anything\n const areRelatedIdsEqual = OrmUtils.compareIds(\n relatedEntityRelationIdMap,\n databaseRelatedEntityRelationIdMap,\n )\n if (areRelatedIdsEqual) {\n return\n } else {\n subject.diffRelations.push(relation)\n }\n }\n\n // if there is an inserted subject for the related entity of the persisted entity then use it as related entity\n // this code is used for related entities without ids to be properly inserted (and then updated if needed)\n const valueSubject = allSubjects.find(\n (subject) =>\n subject.mustBeInserted && subject.entity === relatedEntity,\n )\n if (valueSubject) relatedEntity = valueSubject\n\n // find if there is already a relation to be changed\n const changeMap = subject.changeMaps.find(\n (changeMap) => changeMap.relation === relation,\n )\n if (changeMap) {\n // and update its value if it was found\n changeMap.value = relatedEntity\n } else {\n // if it wasn't found add a new relation for change\n subject.changeMaps.push({\n relation: relation,\n value: relatedEntity,\n })\n }\n })\n }\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../../src/persistence/SubjectChangedColumnsComputer.ts"],"names":[],"mappings":"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","file":"SubjectChangedColumnsComputer.js","sourcesContent":["import { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { ApplyValueTransformers } from \"../util/ApplyValueTransformers\"\nimport { DateUtils } from \"../util/DateUtils\"\nimport { ObjectUtils } from \"../util/ObjectUtils\"\nimport { OrmUtils } from \"../util/OrmUtils\"\nimport { Subject } from \"./Subject\"\n\n/**\n * Finds what columns are changed in the subject entities.\n */\nexport class SubjectChangedColumnsComputer {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Finds what columns are changed in the subject entities.\n */\n compute(subjects: Subject[]) {\n subjects.forEach((subject) => {\n this.computeDiffColumns(subject)\n this.computeDiffRelationalColumns(subjects, subject)\n })\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Differentiate columns from the updated entity and entity stored in the database.\n */\n protected computeDiffColumns(subject: Subject): void {\n // if there is no persisted entity then nothing to compute changed in it\n if (!subject.entity) return\n\n subject.metadata.columns.forEach((column) => {\n // ignore special columns\n if (\n column.isVirtual ||\n column.isDiscriminator // ||\n // column.isUpdateDate ||\n // column.isVersion ||\n // column.isCreateDate\n )\n return\n\n const changeMap = subject.changeMaps.find(\n (changeMap) => changeMap.column === column,\n )\n if (changeMap) {\n subject.changeMaps.splice(\n subject.changeMaps.indexOf(changeMap),\n 1,\n )\n }\n\n // get user provided value - column value from the user provided persisted entity\n const entityValue = column.getEntityValue(subject.entity!)\n\n // we don't perform operation over undefined properties (but we DO need null properties!)\n if (entityValue === undefined) return\n\n // if there is no database entity then all columns are treated as new, e.g. changed\n if (subject.databaseEntity) {\n // skip transform database value for json / jsonb for comparison later on\n const shouldTransformDatabaseEntity =\n column.type !== \"json\" && column.type !== \"jsonb\"\n\n // get database value of the column\n let databaseValue = column.getEntityValue(\n subject.databaseEntity,\n shouldTransformDatabaseEntity,\n )\n\n // Defer to computeDiffRelationalColumns only for auto-created\n // join columns (propertyName matches the owning relation).\n // User-defined columns that double as join columns must stay\n // in the diff so their explicit entity value is never lost.\n if (\n column.propertyName ===\n column.relationMetadata?.propertyName\n ) {\n const value = column.relationMetadata.getEntityValue(\n subject.entity!,\n )\n if (value !== null && value !== undefined) return\n }\n let normalizedValue = entityValue\n // if both values are not null, normalize special values to make proper comparision\n if (entityValue !== null && databaseValue !== null) {\n switch (column.type) {\n case \"date\":\n normalizedValue = column.isArray\n ? entityValue.map((date: Date) =>\n DateUtils.mixedDateToDateString(date),\n )\n : DateUtils.mixedDateToDateString(entityValue)\n databaseValue = column.isArray\n ? databaseValue.map((date: Date) =>\n DateUtils.mixedDateToDateString(date),\n )\n : DateUtils.mixedDateToDateString(databaseValue)\n break\n\n case \"time\":\n case \"time with time zone\":\n case \"time without time zone\":\n case \"timetz\":\n normalizedValue = column.isArray\n ? entityValue.map((date: Date) =>\n DateUtils.mixedDateToTimeString(date),\n )\n : DateUtils.mixedDateToTimeString(entityValue)\n databaseValue = column.isArray\n ? databaseValue.map((date: Date) =>\n DateUtils.mixedDateToTimeString(date),\n )\n : DateUtils.mixedDateToTimeString(databaseValue)\n break\n\n case \"datetime\":\n case \"datetime2\":\n case Date:\n case \"timestamp\":\n case \"timestamp without time zone\":\n case \"timestamp with time zone\":\n case \"timestamp with local time zone\":\n case \"timestamptz\":\n normalizedValue = column.isArray\n ? entityValue.map((date: Date) =>\n DateUtils.mixedDateToUtcDatetimeString(\n date,\n ),\n )\n : DateUtils.mixedDateToUtcDatetimeString(\n entityValue,\n )\n\n databaseValue = column.isArray\n ? databaseValue.map((date: Date) =>\n DateUtils.mixedDateToUtcDatetimeString(\n date,\n ),\n )\n : DateUtils.mixedDateToUtcDatetimeString(\n databaseValue,\n )\n\n break\n\n case \"json\":\n case \"jsonb\":\n // JSON.stringify doesn't work because postgresql sorts jsonb before save.\n // If you try to save json '[{\"messages\": \"\", \"attribute Key\": \"\", \"level\":\"\"}] ' as jsonb,\n // then postgresql will save it as '[{\"level\": \"\", \"message\":\"\", \"attributeKey\": \"\"}]'\n if (\n OrmUtils.deepCompare(entityValue, databaseValue)\n )\n return\n break\n\n case \"simple-array\":\n normalizedValue =\n DateUtils.simpleArrayToString(entityValue)\n databaseValue =\n DateUtils.simpleArrayToString(databaseValue)\n break\n case \"simple-enum\":\n normalizedValue =\n DateUtils.simpleEnumToString(entityValue)\n databaseValue =\n DateUtils.simpleEnumToString(databaseValue)\n break\n case \"simple-json\":\n normalizedValue =\n DateUtils.simpleJsonToString(entityValue)\n databaseValue =\n DateUtils.simpleJsonToString(databaseValue)\n break\n }\n\n if (column.transformer) {\n normalizedValue = ApplyValueTransformers.transformTo(\n column.transformer,\n entityValue,\n )\n }\n }\n\n // if value is not changed - then do nothing\n if (column.isArray) {\n if (OrmUtils.deepCompare(normalizedValue, databaseValue))\n return\n } else if (\n Buffer.isBuffer(normalizedValue) &&\n Buffer.isBuffer(databaseValue)\n ) {\n if (normalizedValue.equals(databaseValue)) {\n return\n }\n } else {\n if (normalizedValue === databaseValue) return\n }\n }\n\n if (!subject.diffColumns.includes(column))\n subject.diffColumns.push(column)\n\n subject.changeMaps.push({\n column: column,\n value: entityValue,\n })\n })\n }\n\n /**\n * Difference columns of the owning one-to-one and many-to-one columns.\n */\n protected computeDiffRelationalColumns(\n allSubjects: Subject[],\n subject: Subject,\n ): void {\n // if there is no persisted entity then nothing to compute changed in it\n if (!subject.entity) return\n\n subject.metadata.relationsWithJoinColumns.forEach((relation) => {\n // get the related entity from the persisted entity\n let relatedEntity = relation.getEntityValue(subject.entity!)\n\n // we don't perform operation over undefined properties (but we DO need null properties!)\n if (relatedEntity === undefined) return\n\n // if there is no database entity then all relational columns are treated as new, e.g. changed\n if (subject.databaseEntity) {\n // here we cover two scenarios:\n // 1. related entity can be another entity which is natural way\n // 2. related entity can be just an entity id\n // if relation entity is just a relation id set (for example post.tag = 1)\n // then we create an id map from it to make a proper comparision\n let relatedEntityRelationIdMap: ObjectLiteral = relatedEntity\n if (\n relatedEntityRelationIdMap !== null &&\n ObjectUtils.isObject(relatedEntityRelationIdMap)\n )\n relatedEntityRelationIdMap = relation.getRelationIdMap(\n relatedEntityRelationIdMap,\n )!\n\n // get database related entity. Since loadRelationIds are used on databaseEntity\n // related entity will contain only its relation ids\n const databaseRelatedEntityRelationIdMap =\n relation.getEntityValue(subject.databaseEntity)\n\n // if relation ids are equal then we don't need to update anything\n const areRelatedIdsEqual = OrmUtils.compareIds(\n relatedEntityRelationIdMap,\n databaseRelatedEntityRelationIdMap,\n )\n if (areRelatedIdsEqual) {\n return\n } else {\n subject.diffRelations.push(relation)\n }\n }\n\n // if there is an inserted subject for the related entity of the persisted entity then use it as related entity\n // this code is used for related entities without ids to be properly inserted (and then updated if needed)\n const valueSubject = allSubjects.find(\n (subject) =>\n subject.mustBeInserted && subject.entity === relatedEntity,\n )\n if (valueSubject) relatedEntity = valueSubject\n\n // find if there is already a relation to be changed\n const changeMap = subject.changeMaps.find(\n (changeMap) => changeMap.relation === relation,\n )\n if (changeMap) {\n // and update its value if it was found\n changeMap.value = relatedEntity\n } else {\n // if it wasn't found add a new relation for change\n subject.changeMaps.push({\n relation: relation,\n value: relatedEntity,\n })\n }\n })\n }\n}\n"],"sourceRoot":".."}
|
|
@@ -99,6 +99,7 @@ export declare class SubjectExecutor {
|
|
|
99
99
|
/**
|
|
100
100
|
* Updates all special columns of the saving entities (create date, update date, version, etc.).
|
|
101
101
|
* Also updates nullable columns and columns with default values.
|
|
102
|
+
* @param subjects
|
|
102
103
|
*/
|
|
103
104
|
protected updateSpecialColumnsInInsertedAndUpdatedEntities(subjects: Subject[]): void;
|
|
104
105
|
/**
|
|
@@ -111,6 +112,8 @@ export declare class SubjectExecutor {
|
|
|
111
112
|
*
|
|
112
113
|
* Other drivers like postgres and sql server support RETURNING / OUTPUT statement which allows to return generated
|
|
113
114
|
* id for each inserted row, that's why bulk insertion is not limited to junction tables in there.
|
|
115
|
+
* @param subjects
|
|
116
|
+
* @param type
|
|
114
117
|
*/
|
|
115
118
|
protected groupBulkSubjects(subjects: Subject[], type: "insert" | "delete"): [{
|
|
116
119
|
[key: string]: Subject[];
|
|
@@ -671,6 +671,7 @@ class SubjectExecutor {
|
|
|
671
671
|
/**
|
|
672
672
|
* Updates all special columns of the saving entities (create date, update date, version, etc.).
|
|
673
673
|
* Also updates nullable columns and columns with default values.
|
|
674
|
+
* @param subjects
|
|
674
675
|
*/
|
|
675
676
|
updateSpecialColumnsInInsertedAndUpdatedEntities(subjects) {
|
|
676
677
|
subjects.forEach((subject) => {
|
|
@@ -696,6 +697,14 @@ class SubjectExecutor {
|
|
|
696
697
|
if (columnValue === undefined)
|
|
697
698
|
column.setEntityValue(subject.entity, null);
|
|
698
699
|
}
|
|
700
|
+
if (!column.isSelect) {
|
|
701
|
+
const target = column.embeddedMetadata
|
|
702
|
+
? OrmUtils_1.OrmUtils.deepValue(subject.entity, column.embeddedMetadata.propertyPath)
|
|
703
|
+
: subject.entity;
|
|
704
|
+
if (target) {
|
|
705
|
+
delete target[column.propertyName];
|
|
706
|
+
}
|
|
707
|
+
}
|
|
699
708
|
// update relational columns
|
|
700
709
|
if (subject.updatedRelationMaps.length > 0) {
|
|
701
710
|
subject.updatedRelationMaps.forEach((updatedRelationMap) => {
|
|
@@ -724,6 +733,8 @@ class SubjectExecutor {
|
|
|
724
733
|
*
|
|
725
734
|
* Other drivers like postgres and sql server support RETURNING / OUTPUT statement which allows to return generated
|
|
726
735
|
* id for each inserted row, that's why bulk insertion is not limited to junction tables in there.
|
|
736
|
+
* @param subjects
|
|
737
|
+
* @param type
|
|
727
738
|
*/
|
|
728
739
|
groupBulkSubjects(subjects, type) {
|
|
729
740
|
const group = {};
|