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
|
@JvmStatic
|
||||||
fun parentsOfNode(user: SteamwarUser, id: Int) = fromSql(
|
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(
|
listOf(
|
||||||
IntegerColumnType() to id,
|
IntegerColumnType() to id,
|
||||||
IntegerColumnType() to user.getId()
|
IntegerColumnType() to user.getId()
|
||||||
|
|||||||
Reference in New Issue
Block a user