KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > teamkonzept > webman > mainint > db > queries > sybase > TKDBSiteTreeMoveNode


1 /*
2  * $Header: /cvsroot/webman-cms/source/webman/com/teamkonzept/webman/mainint/db/queries/sybase/Attic/TKDBSiteTreeMoveNode.java,v 1.2 2001/08/15 12:50:09 markus Exp $
3  *
4  */

5 package com.teamkonzept.webman.mainint.db.queries.sybase;
6
7 import java.sql.*;
8
9 import com.teamkonzept.db.*;
10
11 /*
12  * TKDBSiteTreeMoveNode
13  * Fuegt einen neuen Knoten unterhalb eines Parent Nodes ein
14  * Input:
15  * SRC_NODE_ID (Knoten des zu verschiebenen Knotens )
16  * DEST_NODE_ID (Knoten vor/nach dem eingefuegt werden soll)
17  * UPORDOWN UP = 1 Down = -1
18  * Output:NIX
19  */

20 public class TKDBSiteTreeMoveNode extends TKPrepQuery{
21
22     public final static boolean isPrepared =
23         true;
24     
25     public final static String JavaDoc[] paramOrder =
26         { "SRC_NODE_ID" ,"DEST_NODE_ID" ,"UPORDOWN"
27         };
28     
29     public final static Object JavaDoc[][] paramTypes =
30         null;
31         
32     public final static boolean[] setRelevants =
33         { false };
34         
35     public final static String JavaDoc sqlString =
36         "DECLARE @SRC INT " +
37         "DECLARE @DEST INT " +
38         "DECLARE @UPORDOWN INT " +
39
40         "DECLARE @SRC_L INT " +
41         "DECLARE @SRC_R INT " +
42
43         "DECLARE @DEST_NR INT " +
44         "DECLARE @DIFF INT " +
45         "DECLARE @MAX_RIGHT INT " +
46                 
47         "SELECT @SRC = ? " +
48         "SELECT @DEST = ? " +
49         "SELECT @UPORDOWN = ? " +
50         
51         "SELECT " +
52             "@SRC_L = LEFT_NR, " +
53             "@SRC_R = RIGHT_NR " +
54         "FROM " +
55             "SITE_TREE " +
56         "WHERE " +
57             "SITE_NODE_ID = @SRC " +
58          
59         "IF ( " +
60                 "(@SRC != @DEST) " +
61             "AND NOT " +
62                 "( " +
63                     "@UPORDOWN = 0 " +
64                 "AND " +
65                     "EXISTS (SELECT 1 FROM SITE_TREE WHERE SITE_NODE_ID = @DEST AND SITE_NODE_TYPE < 3 ) " +
66                 ")" +
67             "AND NOT " +
68                 "EXISTS (SELECT 1 FROM SITE_TREE WHERE LEFT_NR > @SRC_L AND RIGHT_NR < @SRC_R AND SITE_NODE_ID = @DEST) " +
69         ")" +
70         "BEGIN " +
71         
72         "BEGIN TRANSACTION " +
73
74         "SELECT " +
75             "@MAX_RIGHT = MAX(RIGHT_NR) " +
76         "FROM " +
77             "SITE_TREE " +
78
79         "SELECT " +
80             "@SRC_L = LEFT_NR, " +
81             "@SRC_R = RIGHT_NR " +
82         "FROM " +
83             "SITE_TREE " +
84         "WHERE " +
85             "SITE_NODE_ID = @SRC " +
86          
87 // Den Teilbaum (der verschoben werden soll) erst mal ganz raus
88

89         "UPDATE " +
90             "SITE_TREE " +
91         "SET " +
92             "RIGHT_NR = RIGHT_NR + @MAX_RIGHT, " +
93             "LEFT_NR = LEFT_NR + @MAX_RIGHT " +
94         "WHERE " +
95             "LEFT_NR >= @SRC_L " +
96         "AND " +
97             "RIGHT_NR <= @SRC_R " +
98             
99         "SELECT @DIFF = (@SRC_R - @SRC_L) + 1 " +
100         
101 //Denn restlichen Baum wieder zurecht ruecken
102
"UPDATE " +
103             "SITE_TREE " +
104         "SET " +
105             "LEFT_NR = LEFT_NR - @DIFF " +
106         "WHERE " +
107             "LEFT_NR >= @SRC_L " +
108         "AND " +
109             "RIGHT_NR <= @MAX_RIGHT " +
110             
111         "UPDATE " +
112             "SITE_TREE " +
113         "SET " +
114             "RIGHT_NR = RIGHT_NR - @DIFF " +
115         "WHERE " +
116             "RIGHT_NR >= @SRC_L " +
117         "AND " +
118             "RIGHT_NR <= @MAX_RIGHT " +
119
120 // Ziel ist vor oder hinter Zielknoten ?
121
"IF (@UPORDOWN = 1) " +
122         "BEGIN " +
123             "SELECT " +
124                 "@DEST_NR = LEFT_NR " +
125             "FROM " +
126                 "SITE_TREE " +
127             "WHERE " +
128                 "SITE_NODE_ID = @DEST " +
129         "END ELSE BEGIN " +
130             "IF (@UPORDOWN = -1) " +
131             "BEGIN " +
132                 "SELECT " +
133                     "@DEST_NR = RIGHT_NR + 1 " +
134                 "FROM " +
135                     "SITE_TREE " +
136                 "WHERE " +
137                     "SITE_NODE_ID = @DEST " +
138             "END ELSE BEGIN " +
139                 "SELECT " +
140                     "@DEST_NR = LEFT_NR + 1 " +
141                 "FROM " +
142                     "SITE_TREE " +
143                 "WHERE " +
144                     "SITE_NODE_ID = @DEST " +
145             "END " +
146         "END " +
147
148 // An der richtigen Stelle Platz schaffen
149
"UPDATE " +
150             "SITE_TREE " +
151         "SET " +
152             "LEFT_NR = LEFT_NR + @DIFF " +
153         "WHERE " +
154             "LEFT_NR >= @DEST_NR " +
155         "AND " +
156             "RIGHT_NR <= @MAX_RIGHT " +
157
158         "UPDATE " +
159             "SITE_TREE " +
160         "SET " +
161             "RIGHT_NR = RIGHT_NR + @DIFF " +
162         "WHERE " +
163             "RIGHT_NR >= @DEST_NR " +
164         "AND " +
165             "RIGHT_NR <= @MAX_RIGHT " +
166
167         "SELECT @DIFF = @DEST_NR - @SRC_L - @MAX_RIGHT " +
168
169 // Src Knoten an diese Stelle einfuegen
170
"UPDATE " +
171             "SITE_TREE " +
172         "SET " +
173             "RIGHT_NR = RIGHT_NR + @DIFF, " +
174             "LEFT_NR = LEFT_NR + @DIFF " +
175         "WHERE " +
176             "RIGHT_NR > @MAX_RIGHT " +
177
178 // Und den neuen Parent des Src Knotens setzen
179
"IF (@UPORDOWN = 0) " +
180         "BEGIN " +
181             "UPDATE " +
182                 "SITE_TREE " +
183             "SET " +
184                 "SITE_NODE_PARENT = @DEST " +
185             "WHERE " +
186                 "SITE_NODE_ID = @SRC " +
187         "END ELSE BEGIN " +
188             "UPDATE " +
189                 "SITE_TREE " +
190             "SET " +
191                 "SITE_NODE_PARENT = " +
192                 "(SELECT SITE_NODE_PARENT FROM SITE_TREE WHERE SITE_NODE_ID = @DEST) " +
193             "WHERE " +
194                 "SITE_NODE_ID = @SRC " +
195         "END " +
196             
197         "COMMIT TRANSACTION " +
198
199         "END ";
200         
201         
202     public void initQuery(Connection con) {
203         super.initQuery(
204             con,
205             isPrepared,
206             paramOrder,
207             paramTypes,
208             setRelevants,
209             sqlString );
210     }
211 }
212
213
Popular Tags