forked from SteamWar/SteamWar
Remove usage of EffectiveSchematicNode
Signed-off-by: Chaoscaot <max@maxsp.de>
This commit is contained in:
@@ -146,7 +146,91 @@ class SchematicNode(id: EntityID<Int>) : IntEntity(id) {
|
||||
|
||||
@JvmStatic
|
||||
fun parentsOfNode(user: SteamwarUser, id: Int) = fromSql(
|
||||
"WITH RECURSIVE R AS (SELECT NodeId, ParentNode FROM EffectiveSchematicNode WHERE NodeId = ? UNION SELECT E.NodeId, E.ParentNode FROM R, EffectiveSchematicNode E WHERE R.ParentNode = E.NodeId AND E.EffectiveOwner = ?) SELECT SN.NodeId, SN.NodeOwner, SN.NodeName, R.ParentNode, SN.LastUpdate, SN.NodeItem, SN.NodeType, SN.NodeRank, SN.Config FROM R INNER JOIN SchematicNode SN ON SN.NodeId = R.NodeId",
|
||||
"""
|
||||
WITH RECURSIVE
|
||||
ESN_R AS (
|
||||
SELECT SchematicNode.NodeId AS NodeId,
|
||||
NM.UserId AS EffectiveOwner,
|
||||
NM.ParentId AS ParentNode
|
||||
FROM SchematicNode
|
||||
INNER JOIN NodeMember NM ON NM.NodeId = SchematicNode.NodeId
|
||||
UNION ALL
|
||||
SELECT S.NodeId AS NodeId,
|
||||
ESN_R.EffectiveOwner AS EffectiveOwner,
|
||||
S.ParentNode AS ParentNode
|
||||
FROM SchematicNode S
|
||||
INNER JOIN ESN_R ON S.ParentNode = ESN_R.NodeId
|
||||
),
|
||||
ESN_R2 AS (
|
||||
SELECT SchematicNode.NodeId AS NodeId,
|
||||
NM.UserId AS UserId,
|
||||
SchematicNode.NodeOwner AS EffectiveOwner,
|
||||
SchematicNode.ParentNode AS ParentNode
|
||||
FROM SchematicNode
|
||||
INNER JOIN NodeMember NM ON NM.NodeId = SchematicNode.NodeId
|
||||
UNION ALL
|
||||
SELECT S.NodeId AS NodeId,
|
||||
ESN_R2.EffectiveOwner AS EffectiveOwner,
|
||||
ESN_R2.UserId AS UserId,
|
||||
S.ParentNode AS ParentNode
|
||||
FROM SchematicNode S
|
||||
INNER JOIN ESN_R2 ON S.ParentNode = ESN_R2.NodeId
|
||||
WHERE S.NodeOwner <> ESN_R2.EffectiveOwner
|
||||
),
|
||||
ESN_R3 AS (
|
||||
SELECT SchematicNode.NodeId AS NodeId,
|
||||
SchematicNode.NodeOwner AS NodeOwner,
|
||||
SchematicNode.NodeOwner AS EffectiveOwner,
|
||||
SchematicNode.ParentNode AS ParentNode
|
||||
FROM SchematicNode
|
||||
UNION ALL
|
||||
SELECT S.NodeId AS NodeId,
|
||||
S.NodeOwner AS NodeOwner,
|
||||
ESN_R3.EffectiveOwner AS EffectiveOwner,
|
||||
S.ParentNode AS ParentNode
|
||||
FROM SchematicNode S
|
||||
INNER JOIN ESN_R3 ON S.ParentNode = ESN_R3.NodeId
|
||||
WHERE ESN_R3.NodeOwner <> S.NodeOwner
|
||||
),
|
||||
ResolvedNodes AS (
|
||||
SELECT ESN_R.NodeId AS NodeId,
|
||||
ESN_R.EffectiveOwner AS EffectiveOwner,
|
||||
ESN_R.ParentNode AS ParentNode
|
||||
FROM ESN_R
|
||||
UNION
|
||||
SELECT ESN_R2.NodeId AS NodeId,
|
||||
ESN_R2.UserId AS EffectiveOwner,
|
||||
ESN_R2.ParentNode AS ParentNode
|
||||
FROM ESN_R2
|
||||
INNER JOIN SchematicNode SN2 ON ESN_R2.NodeId = SN2.NodeId
|
||||
WHERE ESN_R2.ParentNode IS NOT NULL
|
||||
AND SN2.NodeOwner <> ESN_R2.EffectiveOwner
|
||||
UNION
|
||||
SELECT ESN_R3.NodeId AS NodeId,
|
||||
ESN_R3.EffectiveOwner AS EffectiveOwner,
|
||||
ESN_R3.ParentNode AS ParentNode
|
||||
FROM ESN_R3
|
||||
WHERE ESN_R3.NodeOwner <> ESN_R3.EffectiveOwner
|
||||
UNION
|
||||
SELECT SchematicNode.NodeId AS NodeId,
|
||||
SchematicNode.NodeOwner AS EffectiveOwner,
|
||||
SchematicNode.ParentNode AS ParentNode
|
||||
FROM SchematicNode
|
||||
),
|
||||
R AS (
|
||||
SELECT NodeId, ParentNode
|
||||
FROM ResolvedNodes
|
||||
WHERE NodeId = ?
|
||||
UNION
|
||||
SELECT E.NodeId, E.ParentNode
|
||||
FROM R
|
||||
INNER JOIN ResolvedNodes E ON R.ParentNode = E.NodeId
|
||||
WHERE E.EffectiveOwner = ?
|
||||
)
|
||||
SELECT SN.NodeId, SN.NodeOwner, SN.NodeName, R.ParentNode, SN.LastUpdate, SN.NodeItem, SN.NodeType, SN.NodeRank, SN.Config
|
||||
FROM R
|
||||
INNER JOIN SchematicNode SN ON SN.NodeId = R.NodeId
|
||||
""".trimIndent(),
|
||||
listOf(
|
||||
IntegerColumnType() to id,
|
||||
IntegerColumnType() to user.getId()
|
||||
|
||||
Reference in New Issue
Block a user