Skip to content

Commit 121630a

Browse files
authored
Merge pull request #532 from modelix/bugfix/MODELIX-773
MODELIX-777 model-server 4.10.0 does not return any data in ModelQl queries
2 parents beb96f4 + 4538ee4 commit 121630a

File tree

2 files changed

+66
-6
lines changed

2 files changed

+66
-6
lines changed

model-datastructure/src/jvmMain/kotlin/org/modelix/model/InMemoryModel.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,14 +106,15 @@ class InMemoryModel private constructor(
106106
val branchId: String,
107107
val loadedMapRef: KVEntryReference<CPHamtNode>,
108108
val nodeMap: TLongObjectMap<CPNode>,
109+
val useRoleIds: Boolean,
109110
) {
110111

111112
companion object {
112113
fun load(tree: CLTree): InMemoryModel {
113-
return load(tree.getId(), tree.data.idToHash, tree.store.keyValueStore)
114+
return load(tree.getId(), tree.data.idToHash, tree.store.keyValueStore, tree.usesRoleIds())
114115
}
115116

116-
fun load(branchId: String, slowMapRef: KVEntryReference<CPHamtNode>, store: IKeyValueStore): InMemoryModel {
117+
fun load(branchId: String, slowMapRef: KVEntryReference<CPHamtNode>, store: IKeyValueStore, useRoleIds: Boolean): InMemoryModel {
117118
val fastMap: TLongObjectMap<CPNode> = TLongObjectHashMap()
118119
val bulkQuery = NonCachingObjectStore(store).newBulkQuery()
119120
LOG.info { "Start loading model into memory" }
@@ -130,14 +131,14 @@ class InMemoryModel private constructor(
130131
bulkQuery.process()
131132
}.milliseconds
132133
LOG.info { "Done loading model into memory after ${duration.toDouble(DurationUnit.SECONDS)} s" }
133-
return InMemoryModel(branchId, slowMapRef, fastMap)
134+
return InMemoryModel(branchId, slowMapRef, fastMap, useRoleIds)
134135
}
135136
}
136137

137138
fun loadIncremental(tree: CLTree): InMemoryModel {
138-
return loadIncremental(tree.data.idToHash, tree.store.keyValueStore)
139+
return loadIncremental(tree.data.idToHash, tree.store.keyValueStore, tree.usesRoleIds())
139140
}
140-
fun loadIncremental(slowMapRef: KVEntryReference<CPHamtNode>, store: IKeyValueStore): InMemoryModel {
141+
fun loadIncremental(slowMapRef: KVEntryReference<CPHamtNode>, store: IKeyValueStore, useRoleIds: Boolean): InMemoryModel {
141142
if (slowMapRef.getHash() == loadedMapRef.getHash()) return this
142143

143144
val fastMap: TLongObjectMap<CPNode> = TLongObjectHashMap()
@@ -180,7 +181,7 @@ class InMemoryModel private constructor(
180181
bulkQuery.process()
181182
}.milliseconds
182183
LOG.info { "Done updating model after ${duration.toDouble(DurationUnit.SECONDS)} s" }
183-
return InMemoryModel(branchId, slowMapRef, fastMap)
184+
return InMemoryModel(branchId, slowMapRef, fastMap, useRoleIds)
184185
}
185186

186187
fun getNodeData(nodeId: Long): CPNode = nodeMap.get(nodeId)
@@ -253,6 +254,9 @@ class InMemoryModel private constructor(
253254
}
254255

255256
data class InMemoryNode(val model: InMemoryModel, val nodeId: Long) : INode, INodeReference {
257+
258+
override fun usesRoleIds(): Boolean = model.useRoleIds
259+
256260
fun getNodeData(): CPNode = model.getNodeData(nodeId)
257261

258262
override fun serialize(): String {
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
* Copyright (c) 2024.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.modelix.model
18+
19+
import org.junit.Test
20+
import org.modelix.model.api.BuiltinLanguages
21+
import org.modelix.model.api.TreePointer
22+
import org.modelix.model.api.getRootNode
23+
import org.modelix.model.client.IdGenerator
24+
import org.modelix.model.lazy.CLTree
25+
import org.modelix.model.lazy.ObjectStoreCache
26+
import org.modelix.model.lazy.RepositoryId
27+
import org.modelix.model.persistent.CPTree
28+
import org.modelix.model.persistent.MapBasedStore
29+
import kotlin.test.assertEquals
30+
31+
class InMemoryModelTest {
32+
33+
@Test
34+
fun `built-in properties can be resolved - use role ids`() = `built-in properties can be resolved`(true)
35+
36+
@Test
37+
fun `built-in properties can be resolved - use role names`() = `built-in properties can be resolved`(false)
38+
39+
private fun `built-in properties can be resolved`(useRoleIds: Boolean) {
40+
val tree = CLTree(null as CPTree?, null as RepositoryId?, ObjectStoreCache(MapBasedStore()), useRoleIds = useRoleIds)
41+
val treePointer = TreePointer(tree, IdGenerator.getInstance(1))
42+
val expected = "MyModel"
43+
44+
treePointer.runWrite {
45+
val root = treePointer.getRootNode()
46+
root.addNewChild(BuiltinLanguages.MPSRepositoryConcepts.Repository.modules, -1, BuiltinLanguages.MPSRepositoryConcepts.Module).apply {
47+
setPropertyValue(BuiltinLanguages.jetbrains_mps_lang_core.INamedConcept.name, expected)
48+
}
49+
}
50+
51+
val inMemoryModel = InMemoryModel.load(treePointer.tree as CLTree)
52+
val inMemoryNode = inMemoryModel.getArea().getRoot().allChildren.first()
53+
val actual = inMemoryNode.getPropertyValue(BuiltinLanguages.jetbrains_mps_lang_core.INamedConcept.name)
54+
assertEquals(expected, actual)
55+
}
56+
}

0 commit comments

Comments
 (0)