@itwin/core-backend 4.8.0-dev.6 → 4.8.0-dev.8

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 (116) 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.d.ts +1 -0
  10. package/lib/cjs/ChangedElementsDb.d.ts.map +1 -1
  11. package/lib/cjs/ChangedElementsDb.js +1 -1
  12. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  13. package/lib/cjs/ChangedElementsManager.js.map +1 -1
  14. package/lib/cjs/ChangesetECAdaptor.js +237 -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.d.ts +28 -11
  21. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  22. package/lib/cjs/CloudSqlite.js +42 -1
  23. package/lib/cjs/CloudSqlite.js.map +1 -1
  24. package/lib/cjs/CodeService.js.map +1 -1
  25. package/lib/cjs/CodeSpecs.js.map +1 -1
  26. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  27. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  28. package/lib/cjs/DevTools.js.map +1 -1
  29. package/lib/cjs/DisplayStyle.js.map +1 -1
  30. package/lib/cjs/ECDb.js.map +1 -1
  31. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  32. package/lib/cjs/ECSqlStatement.js.map +1 -1
  33. package/lib/cjs/Element.d.ts +1 -1
  34. package/lib/cjs/Element.js +1 -1
  35. package/lib/cjs/Element.js.map +1 -1
  36. package/lib/cjs/ElementAspect.js.map +1 -1
  37. package/lib/cjs/ElementGraphics.js.map +1 -1
  38. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  39. package/lib/cjs/Entity.js.map +1 -1
  40. package/lib/cjs/EntityReferences.js.map +1 -1
  41. package/lib/cjs/ExportGraphics.js.map +1 -1
  42. package/lib/cjs/ExternalSource.js.map +1 -1
  43. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  44. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  45. package/lib/cjs/GeometrySummary.js +47 -47
  46. package/lib/cjs/GeometrySummary.js.map +1 -1
  47. package/lib/cjs/HubMock.js.map +1 -1
  48. package/lib/cjs/IModelCloneContext.js.map +1 -1
  49. package/lib/cjs/IModelDb.d.ts +1 -1
  50. package/lib/cjs/IModelDb.d.ts.map +1 -1
  51. package/lib/cjs/IModelDb.js +14 -9
  52. package/lib/cjs/IModelDb.js.map +1 -1
  53. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  54. package/lib/cjs/IModelHost.js.map +1 -1
  55. package/lib/cjs/IModelJsFs.js.map +1 -1
  56. package/lib/cjs/IpcHost.js.map +1 -1
  57. package/lib/cjs/LineStyle.js.map +1 -1
  58. package/lib/cjs/LocalHub.js +1 -1
  59. package/lib/cjs/LocalHub.js.map +1 -1
  60. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  61. package/lib/cjs/Material.js.map +1 -1
  62. package/lib/cjs/Model.js.map +1 -1
  63. package/lib/cjs/NativeAppStorage.js.map +1 -1
  64. package/lib/cjs/NativeHost.js.map +1 -1
  65. package/lib/cjs/NavigationRelationship.js.map +1 -1
  66. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  67. package/lib/cjs/PropertyStore.js.map +1 -1
  68. package/lib/cjs/Relationship.js.map +1 -1
  69. package/lib/cjs/RpcBackend.js.map +1 -1
  70. package/lib/cjs/SQLiteDb.js.map +1 -1
  71. package/lib/cjs/Schema.js.map +1 -1
  72. package/lib/cjs/SchemaSync.js.map +1 -1
  73. package/lib/cjs/SchemaUtils.js.map +1 -1
  74. package/lib/cjs/ServerBasedLocks.js.map +1 -1
  75. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  76. package/lib/cjs/SqliteStatement.js.map +1 -1
  77. package/lib/cjs/TextAnnotationElement.js.map +1 -1
  78. package/lib/cjs/TextAnnotationGeometry.js.map +1 -1
  79. package/lib/cjs/TextAnnotationLayout.js.map +1 -1
  80. package/lib/cjs/Texture.js.map +1 -1
  81. package/lib/cjs/TileStorage.js.map +1 -1
  82. package/lib/cjs/TxnManager.js.map +1 -1
  83. package/lib/cjs/ViewDefinition.js.map +1 -1
  84. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  85. package/lib/cjs/ViewStore.js.map +1 -1
  86. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  87. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  88. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  89. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  90. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  91. package/lib/cjs/core-backend.js.map +1 -1
  92. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  93. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  94. package/lib/cjs/domains/GenericElements.js.map +1 -1
  95. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  96. package/lib/cjs/internal/ImplementationProhibited.js.map +1 -1
  97. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  98. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  99. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  100. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  101. package/lib/cjs/rpc/multipart.js.map +1 -1
  102. package/lib/cjs/rpc/tracing.js.map +1 -1
  103. package/lib/cjs/rpc/web/logging.js.map +1 -1
  104. package/lib/cjs/rpc/web/request.js.map +1 -1
  105. package/lib/cjs/rpc/web/response.js.map +1 -1
  106. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  107. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  108. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  109. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  110. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  111. package/lib/cjs/rpc-impl/WipRpcImpl.js.map +1 -1
  112. package/lib/cjs/workspace/Settings.js.map +1 -1
  113. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  114. package/lib/cjs/workspace/Workspace.js.map +1 -1
  115. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  116. package/package.json +13 -13
@@ -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,34 @@ 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', [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] = ?;
69
69
  `;
70
70
  return this.db.withPreparedSqliteStatement(sql, (stmt) => {
71
71
  stmt.bindString(1, tableName);
@@ -86,186 +86,186 @@ class ECDbMap {
86
86
  getClassMap(classId) {
87
87
  if (this._cachedClassMaps.has(classId))
88
88
  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] = ?
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] = ?
269
269
  `;
270
270
  return this.db.withPreparedSqliteStatement(sql, (stmt) => {
271
271
  stmt.bindId(1, classId);
@@ -333,27 +333,27 @@ class PartialECChangeUnifier {
333
333
  * @returns return root class id
334
334
  */
335
335
  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'))
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'))
357
357
  ORDER BY [Level] DESC`;
358
358
  return db.withSqliteStatement(sql, (stmt) => {
359
359
  stmt.bindId(1, classId);