From 6c062216a105fec775577408d72040d31010e9e4 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Tue, 24 Mar 2026 20:07:17 +0100 Subject: [PATCH] Remove usage of EffectiveSchematicNode Signed-off-by: Chaoscaot --- .../SQL/src/de/steamwar/sql/SchematicNode.kt | 86 ++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/CommonCore/SQL/src/de/steamwar/sql/SchematicNode.kt b/CommonCore/SQL/src/de/steamwar/sql/SchematicNode.kt index d27c2890..aed85b1e 100644 --- a/CommonCore/SQL/src/de/steamwar/sql/SchematicNode.kt +++ b/CommonCore/SQL/src/de/steamwar/sql/SchematicNode.kt @@ -146,7 +146,91 @@ class SchematicNode(id: EntityID) : 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()