@itwin/core-backend 5.0.0-dev.72 → 5.0.0-dev.73

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