@itwin/core-backend 4.7.4 → 4.7.5

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.
Files changed (103) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/lib/cjs/BackendHubAccess.js.map +1 -1
  3. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  4. package/lib/cjs/BisCoreSchema.js.map +1 -1
  5. package/lib/cjs/BlobContainerService.js.map +1 -1
  6. package/lib/cjs/BriefcaseManager.js.map +1 -1
  7. package/lib/cjs/Category.js.map +1 -1
  8. package/lib/cjs/ChangeSummaryManager.d.ts.map +1 -1
  9. package/lib/cjs/ChangeSummaryManager.js +6 -5
  10. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  11. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  12. package/lib/cjs/ChangedElementsManager.js.map +1 -1
  13. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  14. package/lib/cjs/ChangesetECAdaptor.js +242 -237
  15. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  16. package/lib/cjs/ChannelControl.js.map +1 -1
  17. package/lib/cjs/CheckpointManager.js.map +1 -1
  18. package/lib/cjs/ClassRegistry.js +5 -5
  19. package/lib/cjs/ClassRegistry.js.map +1 -1
  20. package/lib/cjs/CloudSqlite.js.map +1 -1
  21. package/lib/cjs/CodeService.js.map +1 -1
  22. package/lib/cjs/CodeSpecs.js.map +1 -1
  23. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  24. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  25. package/lib/cjs/DevTools.js.map +1 -1
  26. package/lib/cjs/DisplayStyle.js.map +1 -1
  27. package/lib/cjs/ECDb.js.map +1 -1
  28. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  29. package/lib/cjs/ECSqlStatement.js.map +1 -1
  30. package/lib/cjs/Element.js.map +1 -1
  31. package/lib/cjs/ElementAspect.js.map +1 -1
  32. package/lib/cjs/ElementGraphics.js.map +1 -1
  33. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  34. package/lib/cjs/Entity.js.map +1 -1
  35. package/lib/cjs/EntityReferences.js.map +1 -1
  36. package/lib/cjs/ExportGraphics.js.map +1 -1
  37. package/lib/cjs/ExternalSource.js.map +1 -1
  38. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  39. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  40. package/lib/cjs/GeometrySummary.js +47 -47
  41. package/lib/cjs/GeometrySummary.js.map +1 -1
  42. package/lib/cjs/HubMock.js.map +1 -1
  43. package/lib/cjs/IModelCloneContext.js.map +1 -1
  44. package/lib/cjs/IModelDb.js +8 -8
  45. package/lib/cjs/IModelDb.js.map +1 -1
  46. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  47. package/lib/cjs/IModelHost.js.map +1 -1
  48. package/lib/cjs/IModelJsFs.js.map +1 -1
  49. package/lib/cjs/IpcHost.js.map +1 -1
  50. package/lib/cjs/LineStyle.js.map +1 -1
  51. package/lib/cjs/LocalHub.js +1 -1
  52. package/lib/cjs/LocalHub.js.map +1 -1
  53. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  54. package/lib/cjs/Material.js.map +1 -1
  55. package/lib/cjs/Model.js.map +1 -1
  56. package/lib/cjs/NativeAppStorage.js.map +1 -1
  57. package/lib/cjs/NativeHost.js.map +1 -1
  58. package/lib/cjs/NavigationRelationship.js.map +1 -1
  59. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  60. package/lib/cjs/PropertyStore.js.map +1 -1
  61. package/lib/cjs/Relationship.js.map +1 -1
  62. package/lib/cjs/RpcBackend.js.map +1 -1
  63. package/lib/cjs/SQLiteDb.js.map +1 -1
  64. package/lib/cjs/Schema.js.map +1 -1
  65. package/lib/cjs/SchemaSync.js.map +1 -1
  66. package/lib/cjs/SchemaUtils.js.map +1 -1
  67. package/lib/cjs/ServerBasedLocks.js.map +1 -1
  68. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  69. package/lib/cjs/SqliteStatement.js.map +1 -1
  70. package/lib/cjs/TextAnnotationElement.js.map +1 -1
  71. package/lib/cjs/TextAnnotationGeometry.js.map +1 -1
  72. package/lib/cjs/TextAnnotationLayout.js.map +1 -1
  73. package/lib/cjs/Texture.js.map +1 -1
  74. package/lib/cjs/TileStorage.js.map +1 -1
  75. package/lib/cjs/TxnManager.js.map +1 -1
  76. package/lib/cjs/ViewDefinition.js.map +1 -1
  77. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  78. package/lib/cjs/ViewStore.js.map +1 -1
  79. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  80. package/lib/cjs/assets/Settings/Schemas/Cloud.Schema.json +44 -44
  81. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +31 -31
  82. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +52 -52
  83. package/lib/cjs/assets/Settings/backend.setting.json5 +132 -132
  84. package/lib/cjs/core-backend.js.map +1 -1
  85. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  86. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  87. package/lib/cjs/domains/GenericElements.js.map +1 -1
  88. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  89. package/lib/cjs/rpc/multipart.js.map +1 -1
  90. package/lib/cjs/rpc/tracing.js.map +1 -1
  91. package/lib/cjs/rpc/web/logging.js.map +1 -1
  92. package/lib/cjs/rpc/web/request.js.map +1 -1
  93. package/lib/cjs/rpc/web/response.js.map +1 -1
  94. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  95. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  96. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  97. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  98. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  99. package/lib/cjs/rpc-impl/WipRpcImpl.js.map +1 -1
  100. package/lib/cjs/workspace/Settings.js.map +1 -1
  101. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  102. package/lib/cjs/workspace/Workspace.js.map +1 -1
  103. package/package.json +11 -11
@@ -16,14 +16,14 @@ class ECDbMap {
16
16
  this._cacheTables = new Map();
17
17
  }
18
18
  getAllDerivedClasses(classFullName) {
19
- const sql = `
20
- SELECT format('0x%x', ch.ClassId)
21
- FROM [ec_cache_ClassHierarchy] [ch]
22
- JOIN [ec_Class] [cs] ON [cs].[Id] = [ch].[BaseClassId]
23
- JOIN [ec_Schema] [sc] ON [sc].[Id] = [cs].[SchemaId]
24
- WHERE (([sc].[Alias] = :schemaNameOrAlias
25
- OR [sc].[Name] = :schemaNameOrAlias)
26
- AND ([cs].[Name] = :className))
19
+ const sql = `
20
+ SELECT format('0x%x', ch.ClassId)
21
+ FROM [ec_cache_ClassHierarchy] [ch]
22
+ JOIN [ec_Class] [cs] ON [cs].[Id] = [ch].[BaseClassId]
23
+ JOIN [ec_Schema] [sc] ON [sc].[Id] = [cs].[SchemaId]
24
+ WHERE (([sc].[Alias] = :schemaNameOrAlias
25
+ OR [sc].[Name] = :schemaNameOrAlias)
26
+ AND ([cs].[Name] = :className))
27
27
  `;
28
28
  return this.db.withPreparedSqliteStatement(sql, (stmt) => {
29
29
  const parts = classFullName.indexOf(".") !== -1 ? classFullName.split(".") : classFullName.split(":");
@@ -38,34 +38,39 @@ class ECDbMap {
38
38
  getTable(tableName) {
39
39
  if (this._cacheTables.has(tableName))
40
40
  return this._cacheTables.get(tableName);
41
- const sql = `
42
- SELECT
43
- JSON_OBJECT (
44
- 'id', FORMAT ('0x%x', [t].[id]),
45
- 'name', [t].[Name],
46
- 'type', (
47
- CASE
48
- [t].[type]
49
- WHEN 0 THEN 'Primary'
50
- WHEN 1 THEN 'Joined'
51
- WHEN 2 THEN 'Existing'
52
- WHEN 3 THEN 'Overflow'
53
- WHEN 4 THEN 'Virtual'
54
- END
55
- ),
56
- 'exclusiveRootClassId', FORMAT ('0x%x', [t].[ExclusiveRootClassId]),
57
- 'isClassIdVirtual', (
58
- SELECT
59
- [c].[IsVirtual]
60
- FROM
61
- [ec_Column] [c]
62
- WHERE
63
- [c].[Name] = 'ECClassId' AND [c].[TableId] = [t].[Id]
64
- )
65
- )
66
- FROM [ec_Table] [t]
67
- WHERE
68
- [t].[Name] = ?;
41
+ const sql = `
42
+ SELECT
43
+ JSON_OBJECT (
44
+ 'id', FORMAT ('0x%x', [t].[id]),
45
+ 'name', [t].[Name],
46
+ 'type', (
47
+ CASE
48
+ [t].[type]
49
+ WHEN 0 THEN 'Primary'
50
+ WHEN 1 THEN 'Joined'
51
+ WHEN 2 THEN 'Existing'
52
+ WHEN 3 THEN 'Overflow'
53
+ WHEN 4 THEN 'Virtual'
54
+ END
55
+ ),
56
+ 'exclusiveRootClassId', FORMAT ('0x%x',
57
+ COALESCE (
58
+ [t].[ExclusiveRootClassId], (
59
+ SELECT [parent].[ExclusiveRootClassId]
60
+ FROM [ec_Table] [parent]
61
+ WHERE [parent].[Id] = [t].[ParentTableId] AND [parent].[Type] = 1))),
62
+ 'isClassIdVirtual', (
63
+ SELECT
64
+ [c].[IsVirtual]
65
+ FROM
66
+ [ec_Column] [c]
67
+ WHERE
68
+ [c].[Name] = 'ECClassId' AND [c].[TableId] = [t].[Id]
69
+ )
70
+ )
71
+ FROM [ec_Table] [t]
72
+ WHERE
73
+ [t].[Name] = ?;
69
74
  `;
70
75
  return this.db.withPreparedSqliteStatement(sql, (stmt) => {
71
76
  stmt.bindString(1, tableName);
@@ -86,186 +91,186 @@ class ECDbMap {
86
91
  getClassMap(classId) {
87
92
  if (this._cachedClassMaps.has(classId))
88
93
  return this._cachedClassMaps.get(classId);
89
- const sql = `
90
- SELECT
91
- JSON_OBJECT(
92
- 'id', format('0x%x', cs.id),
93
- 'name', format('%s:%s', ss.Name, cs.Name),
94
- 'mapStrategy',
95
- (
96
- CASE cm.MapStrategy
97
- WHEN 0 THEN 'NotMapped'
98
- WHEN 1 THEN 'OwnTable'
99
- WHEN 2 THEN 'TablePerHierarchy'
100
- WHEN 3 THEN 'ExistingTable'
101
- WHEN 10 THEN 'ForeignKeyInTargetTable'
102
- WHEN 11 THEN 'ForeignKeyInSourceTable'
103
- END
104
- ),
105
- 'type',
106
- (
107
- CASE cs.Type
108
- WHEN 0 THEN 'Entity'
109
- WHEN 1 THEN 'Relationship'
110
- WHEN 2 THEN 'Struct'
111
- WHEN 3 THEN 'CustomAttribute'
112
- END
113
- ),
114
- 'modifier',
115
- (
116
- CASE cs.Modifier
117
- WHEN 0 THEN 'None'
118
- WHEN 1 THEN 'Abstract'
119
- WHEN 2 THEN 'Sealed'
120
- END
121
- ),
122
- 'properties',
123
- (
124
- SELECT
125
- JSON_GROUP_ARRAY(JSON(propJson))
126
- FROM
127
- (
128
- SELECT
129
- JSON_OBJECT(
130
- 'id', format('0x%x', pt.id),
131
- 'name', pt.Name,
132
- 'kind',
133
- (
134
- CASE pt.Kind
135
- WHEN 0 THEN 'Primitive'
136
- WHEN 1 THEN 'Struct'
137
- WHEN 2 THEN 'PrimitiveArray'
138
- WHEN 3 THEN 'StructArray'
139
- WHEN 4 THEN 'Navigation'
140
- END
141
- ),
142
- 'primitiveType',
143
- (
144
- CASE pt.PrimitiveType
145
- WHEN 0x101 THEN 'Binary'
146
- WHEN 0x201 THEN 'Boolean'
147
- WHEN 0x301 THEN 'DateTime'
148
- WHEN 0x401 THEN 'Double'
149
- WHEN 0x501 THEN 'Integer'
150
- WHEN 0x601 THEN 'Long'
151
- WHEN 0x701 THEN 'Point2d'
152
- WHEN 0x801 THEN 'Point3d'
153
- WHEN 0x901 THEN 'String'
154
- WHEN 0xa01 THEN 'IGeometry'
155
- END
156
- ),
157
- 'extendedTypeName', ExtendedTypeName,
158
- 'navigationRelationship',
159
- (
160
- SELECT
161
- JSON_OBJECT(
162
- 'classId', format('0x%x', nc.Id),
163
- 'classFullName', format('%s:%s', ns.Name, nc.Name)
164
- )
165
- FROM ec_Class nc
166
- JOIN ec_Schema ns ON ns.Id = nc.SchemaId
167
- WHERE
168
- nc.Id = pt.NavigationRelationshipClassId
169
- ),
170
- 'structClass',
171
- (
172
- SELECT
173
- JSON_OBJECT(
174
- 'classId', format('0x%x', nc.Id),
175
- 'classFullName', format('%s:%s', ns.Name, nc.Name)
176
- )
177
- FROM ec_Class nc
178
- JOIN ec_Schema ns ON ns.Id = nc.SchemaId
179
- WHERE
180
- nc.Id = pt.StructClassId
181
- ),
182
- 'dateTimeInfo', (
183
- SELECT
184
- JSON_OBJECT (
185
- 'dateTimeKind', (
186
- CASE
187
- WHEN [ca].[Instance] LIKE '%<DateTimeKind>Utc</DateTimeKind>%' COLLATE [NoCase] THEN 'Utc'
188
- WHEN [ca].[Instance] LIKE '%<DateTimeKind>Local</DateTimeKind>%' COLLATE [NoCase] THEN 'Local'
189
- ELSE 'Unspecified'
190
- END
191
- ),
192
- 'dateTimeComponent', (
193
- CASE
194
- WHEN [ca].[Instance] LIKE '%<DateTimeComponent>DateTime</DateTimeComponent>%' COLLATE [NoCase] THEN 'DateTime'
195
- WHEN [ca].[Instance] LIKE '%<DateTimeComponent>Date</DateTimeComponent>%' COLLATE [NoCase] THEN 'Date'
196
- WHEN [ca].[Instance] LIKE '%<DateTimeComponent>TimeOfDay</DateTimeComponent>%' COLLATE [NoCase] THEN 'TimeOfDay'
197
- ELSE 'DateTime'
198
- END
199
- )
200
- )
201
- FROM
202
- [ec_CustomAttribute] [ca]
203
- JOIN [ec_Class] [cl] ON [cl].[Id] = [ca].[ClassId]
204
- JOIN [ec_Schema] [sc] ON [sc].[Id] = [cl].[SchemaId]
205
- WHERE
206
- [ca].[ContainerType] = 992
207
- AND [cl].[Name] = 'DateTimeInfo'
208
- AND [sc].[Name] = 'CoreCustomAttributes'
209
- AND [ca].[ContainerId] = [pt].[Id]
210
- ),
211
- 'columns',
212
- (
213
- SELECT
214
- JSON_GROUP_ARRAY(JSON(columnJson))
215
- FROM
216
- (
217
- SELECT
218
- JSON_OBJECT(
219
- 'table', tb.Name,
220
- 'column', cc.Name,
221
- 'type',
222
- (
223
- CASE cc.Type
224
- WHEN 0 THEN 'Any'
225
- WHEN 1 THEN 'Boolean'
226
- WHEN 2 THEN 'Blob'
227
- WHEN 3 THEN 'Timestamp'
228
- WHEN 4 THEN 'Real'
229
- WHEN 5 THEN 'Integer'
230
- WHEN 6 THEN 'Text'
231
- END
232
- ),
233
- 'columnKind',
234
- (
235
- CASE cc.ColumnKind
236
- WHEN 0 THEN 'Default'
237
- WHEN 1 THEN 'Id'
238
- WHEN 2 THEN 'ClassId'
239
- WHEN 4 THEN 'SharedData'
240
- END
241
- ),
242
- 'accessString', pp0.AccessString,
243
- 'isVirtual', cc.IsVirtual OR tb.Type = 4
244
- ) columnJson
245
- FROM [ec_PropertyMap] [pm0]
246
- JOIN [ec_Column] [cc] ON [cc].[Id] = [pm0].[ColumnId]
247
- JOIN [ec_Table] [tb] ON [tb].[Id] = [cc].[TableId]
248
- JOIN [ec_PropertyPath] [pp0] ON [pp0].[Id] = [pm0].[PropertyPathId]
249
- WHERE
250
- [pp0].[RootPropertyId] = pt.Id AND pm0.ClassId = cs.Id
251
- )
252
- )
253
- ) propJson
254
- FROM [ec_PropertyMap] [pm]
255
- JOIN [ec_PropertyPath] [pp] ON [pp].[Id] = [pm].[PropertyPathId]
256
- JOIN [ec_Property] [pt] ON [pt].[Id] = [pp].[RootPropertyId]
257
- WHERE
258
- pm.ClassId = cs.Id
259
- GROUP BY
260
- pt.Id
261
- )
262
- )
263
- ) classDef
264
- FROM [ec_Class] [cs]
265
- JOIN [ec_ClassMap] [cm] ON [cm].[ClassId] = [cs].[Id]
266
- JOIN [ec_Schema] [ss] ON [ss].[Id] = [cs].[SchemaId]
267
- WHERE
268
- [cs].[Id] = ?
94
+ const sql = `
95
+ SELECT
96
+ JSON_OBJECT(
97
+ 'id', format('0x%x', cs.id),
98
+ 'name', format('%s:%s', ss.Name, cs.Name),
99
+ 'mapStrategy',
100
+ (
101
+ CASE cm.MapStrategy
102
+ WHEN 0 THEN 'NotMapped'
103
+ WHEN 1 THEN 'OwnTable'
104
+ WHEN 2 THEN 'TablePerHierarchy'
105
+ WHEN 3 THEN 'ExistingTable'
106
+ WHEN 10 THEN 'ForeignKeyInTargetTable'
107
+ WHEN 11 THEN 'ForeignKeyInSourceTable'
108
+ END
109
+ ),
110
+ 'type',
111
+ (
112
+ CASE cs.Type
113
+ WHEN 0 THEN 'Entity'
114
+ WHEN 1 THEN 'Relationship'
115
+ WHEN 2 THEN 'Struct'
116
+ WHEN 3 THEN 'CustomAttribute'
117
+ END
118
+ ),
119
+ 'modifier',
120
+ (
121
+ CASE cs.Modifier
122
+ WHEN 0 THEN 'None'
123
+ WHEN 1 THEN 'Abstract'
124
+ WHEN 2 THEN 'Sealed'
125
+ END
126
+ ),
127
+ 'properties',
128
+ (
129
+ SELECT
130
+ JSON_GROUP_ARRAY(JSON(propJson))
131
+ FROM
132
+ (
133
+ SELECT
134
+ JSON_OBJECT(
135
+ 'id', format('0x%x', pt.id),
136
+ 'name', pt.Name,
137
+ 'kind',
138
+ (
139
+ CASE pt.Kind
140
+ WHEN 0 THEN 'Primitive'
141
+ WHEN 1 THEN 'Struct'
142
+ WHEN 2 THEN 'PrimitiveArray'
143
+ WHEN 3 THEN 'StructArray'
144
+ WHEN 4 THEN 'Navigation'
145
+ END
146
+ ),
147
+ 'primitiveType',
148
+ (
149
+ CASE pt.PrimitiveType
150
+ WHEN 0x101 THEN 'Binary'
151
+ WHEN 0x201 THEN 'Boolean'
152
+ WHEN 0x301 THEN 'DateTime'
153
+ WHEN 0x401 THEN 'Double'
154
+ WHEN 0x501 THEN 'Integer'
155
+ WHEN 0x601 THEN 'Long'
156
+ WHEN 0x701 THEN 'Point2d'
157
+ WHEN 0x801 THEN 'Point3d'
158
+ WHEN 0x901 THEN 'String'
159
+ WHEN 0xa01 THEN 'IGeometry'
160
+ END
161
+ ),
162
+ 'extendedTypeName', ExtendedTypeName,
163
+ 'navigationRelationship',
164
+ (
165
+ SELECT
166
+ JSON_OBJECT(
167
+ 'classId', format('0x%x', nc.Id),
168
+ 'classFullName', format('%s:%s', ns.Name, nc.Name)
169
+ )
170
+ FROM ec_Class nc
171
+ JOIN ec_Schema ns ON ns.Id = nc.SchemaId
172
+ WHERE
173
+ nc.Id = pt.NavigationRelationshipClassId
174
+ ),
175
+ 'structClass',
176
+ (
177
+ SELECT
178
+ JSON_OBJECT(
179
+ 'classId', format('0x%x', nc.Id),
180
+ 'classFullName', format('%s:%s', ns.Name, nc.Name)
181
+ )
182
+ FROM ec_Class nc
183
+ JOIN ec_Schema ns ON ns.Id = nc.SchemaId
184
+ WHERE
185
+ nc.Id = pt.StructClassId
186
+ ),
187
+ 'dateTimeInfo', (
188
+ SELECT
189
+ JSON_OBJECT (
190
+ 'dateTimeKind', (
191
+ CASE
192
+ WHEN [ca].[Instance] LIKE '%<DateTimeKind>Utc</DateTimeKind>%' COLLATE [NoCase] THEN 'Utc'
193
+ WHEN [ca].[Instance] LIKE '%<DateTimeKind>Local</DateTimeKind>%' COLLATE [NoCase] THEN 'Local'
194
+ ELSE 'Unspecified'
195
+ END
196
+ ),
197
+ 'dateTimeComponent', (
198
+ CASE
199
+ WHEN [ca].[Instance] LIKE '%<DateTimeComponent>DateTime</DateTimeComponent>%' COLLATE [NoCase] THEN 'DateTime'
200
+ WHEN [ca].[Instance] LIKE '%<DateTimeComponent>Date</DateTimeComponent>%' COLLATE [NoCase] THEN 'Date'
201
+ WHEN [ca].[Instance] LIKE '%<DateTimeComponent>TimeOfDay</DateTimeComponent>%' COLLATE [NoCase] THEN 'TimeOfDay'
202
+ ELSE 'DateTime'
203
+ END
204
+ )
205
+ )
206
+ FROM
207
+ [ec_CustomAttribute] [ca]
208
+ JOIN [ec_Class] [cl] ON [cl].[Id] = [ca].[ClassId]
209
+ JOIN [ec_Schema] [sc] ON [sc].[Id] = [cl].[SchemaId]
210
+ WHERE
211
+ [ca].[ContainerType] = 992
212
+ AND [cl].[Name] = 'DateTimeInfo'
213
+ AND [sc].[Name] = 'CoreCustomAttributes'
214
+ AND [ca].[ContainerId] = [pt].[Id]
215
+ ),
216
+ 'columns',
217
+ (
218
+ SELECT
219
+ JSON_GROUP_ARRAY(JSON(columnJson))
220
+ FROM
221
+ (
222
+ SELECT
223
+ JSON_OBJECT(
224
+ 'table', tb.Name,
225
+ 'column', cc.Name,
226
+ 'type',
227
+ (
228
+ CASE cc.Type
229
+ WHEN 0 THEN 'Any'
230
+ WHEN 1 THEN 'Boolean'
231
+ WHEN 2 THEN 'Blob'
232
+ WHEN 3 THEN 'Timestamp'
233
+ WHEN 4 THEN 'Real'
234
+ WHEN 5 THEN 'Integer'
235
+ WHEN 6 THEN 'Text'
236
+ END
237
+ ),
238
+ 'columnKind',
239
+ (
240
+ CASE cc.ColumnKind
241
+ WHEN 0 THEN 'Default'
242
+ WHEN 1 THEN 'Id'
243
+ WHEN 2 THEN 'ClassId'
244
+ WHEN 4 THEN 'SharedData'
245
+ END
246
+ ),
247
+ 'accessString', pp0.AccessString,
248
+ 'isVirtual', cc.IsVirtual OR tb.Type = 4
249
+ ) columnJson
250
+ FROM [ec_PropertyMap] [pm0]
251
+ JOIN [ec_Column] [cc] ON [cc].[Id] = [pm0].[ColumnId]
252
+ JOIN [ec_Table] [tb] ON [tb].[Id] = [cc].[TableId]
253
+ JOIN [ec_PropertyPath] [pp0] ON [pp0].[Id] = [pm0].[PropertyPathId]
254
+ WHERE
255
+ [pp0].[RootPropertyId] = pt.Id AND pm0.ClassId = cs.Id
256
+ )
257
+ )
258
+ ) propJson
259
+ FROM [ec_PropertyMap] [pm]
260
+ JOIN [ec_PropertyPath] [pp] ON [pp].[Id] = [pm].[PropertyPathId]
261
+ JOIN [ec_Property] [pt] ON [pt].[Id] = [pp].[RootPropertyId]
262
+ WHERE
263
+ pm.ClassId = cs.Id
264
+ GROUP BY
265
+ pt.Id
266
+ )
267
+ )
268
+ ) classDef
269
+ FROM [ec_Class] [cs]
270
+ JOIN [ec_ClassMap] [cm] ON [cm].[ClassId] = [cs].[Id]
271
+ JOIN [ec_Schema] [ss] ON [ss].[Id] = [cs].[SchemaId]
272
+ WHERE
273
+ [cs].[Id] = ?
269
274
  `;
270
275
  return this.db.withPreparedSqliteStatement(sql, (stmt) => {
271
276
  stmt.bindId(1, classId);
@@ -333,27 +338,27 @@ class PartialECChangeUnifier {
333
338
  * @returns return root class id
334
339
  */
335
340
  static getRootClassId(classId, db) {
336
- const sql = `
337
- WITH
338
- [base_class]([classId], [baseClassId], [Level]) AS(
339
- SELECT [ch].[ClassId], [ch].[BaseClassId], 0
340
- FROM [ec_ClassHasBaseClasses] [ch] WHERE [ch].[ClassId] = ?
341
- UNION ALL
342
- SELECT [ch].[ClassId], [ch].[BaseClassId], [Level] + 1
343
- FROM [ec_ClassHasBaseClasses] [ch], [base_class] [bc] WHERE [bc].[BaseClassId] = [ch].[ClassId]
344
-
345
- )
346
- SELECT FORMAT('0x%x', [bc].[BaseClassId]) rootClass
347
- FROM [base_class] [bc]
348
- WHERE [bc].[ClassId] <> [bc].[BaseClassId]
349
- AND [bc].[BaseClassId] NOT IN (SELECT [ca].[ContainerId]
350
- FROM [ec_CustomAttribute] [ca]
351
- WHERE [ca].[ContainerType] = 30
352
- AND [ca].[ClassId] IN (SELECT [cc].[Id]
353
- FROM [ec_Class] [cc]
354
- JOIN [ec_Schema] [ss] ON [ss].[Id] = [cc].[SchemaId]
355
- WHERE [cc].[Name] = 'IsMixIn'
356
- AND [ss].[Name] = 'CoreCustomAttributes'))
341
+ const sql = `
342
+ WITH
343
+ [base_class]([classId], [baseClassId], [Level]) AS(
344
+ SELECT [ch].[ClassId], [ch].[BaseClassId], 0
345
+ FROM [ec_ClassHasBaseClasses] [ch] WHERE [ch].[ClassId] = ?
346
+ UNION ALL
347
+ SELECT [ch].[ClassId], [ch].[BaseClassId], [Level] + 1
348
+ FROM [ec_ClassHasBaseClasses] [ch], [base_class] [bc] WHERE [bc].[BaseClassId] = [ch].[ClassId]
349
+
350
+ )
351
+ SELECT FORMAT('0x%x', [bc].[BaseClassId]) rootClass
352
+ FROM [base_class] [bc]
353
+ WHERE [bc].[ClassId] <> [bc].[BaseClassId]
354
+ AND [bc].[BaseClassId] NOT IN (SELECT [ca].[ContainerId]
355
+ FROM [ec_CustomAttribute] [ca]
356
+ WHERE [ca].[ContainerType] = 30
357
+ AND [ca].[ClassId] IN (SELECT [cc].[Id]
358
+ FROM [ec_Class] [cc]
359
+ JOIN [ec_Schema] [ss] ON [ss].[Id] = [cc].[SchemaId]
360
+ WHERE [cc].[Name] = 'IsMixIn'
361
+ AND [ss].[Name] = 'CoreCustomAttributes'))
357
362
  ORDER BY [Level] DESC`;
358
363
  return db.withSqliteStatement(sql, (stmt) => {
359
364
  stmt.bindId(1, classId);