01: package com.teamkonzept.webman.mainint.db.queries.postgresql;
02:
03: import com.teamkonzept.db.*;
04: import java.sql.*;
05: import com.teamkonzept.webman.mainint.db.queries.content.*;
06: import com.teamkonzept.webman.mainint.WebmanExceptionHandler;
07:
08: /*
09: * TKDBContentTreeIsChild
10: * Sagt ob die CHILD_ID ein Nachfolger von PARENT_ID im CONTENT_TREE ist
11: *
12: * Input: PARENT_ID CHILD_ID
13: * Output: ISCHILD = 1 oder 0
14: *
15: * @author
16: * @version
17: */
18: public class TKDBContentTreeIsChild extends TKExtendedPrepQuery {
19:
20: public final static boolean ISPREPARED = true;
21: public final static String[] PARAMORDER = { "CHILD_ID", "PARENT_ID" };
22: public final static Object[][] TYPES = null;
23: public final static boolean[] SETRELEVANTS = { true };
24:
25: protected static Class[] queryClasses = {
26: SelectLeftRightNrFromContentTree.class, // [0]
27: SelectChildExists.class, // [1]
28: SelectIsChild.class // [2]
29: };
30:
31: public boolean execute() {
32: try {
33: init(queryClasses); // init query objects
34:
35: Integer childId = (Integer) queryParams.get("CHILD_ID");
36: Integer parentId = (Integer) queryParams.get("PARENT_ID");
37:
38: // OLD: SELECT @LNR = LEFT_NR, @RNR = RIGHT_NR FROM CONTENT_TREE WHERE CONTENT_NODE_ID = ?
39: // NEW: SELECT LEFT_NR, RIGHT_NR FROM CONTENT_TREE WHERE CONTENT_NODE_ID = ?
40: // CLASS: SelectLeftRightNrFromContentTree.class
41: // PARAMS: NODE_ID
42: // [0]
43: queries[0].setQueryParams("NODE_ID", childId);
44: queries[0].execute();
45: Object lnr = null;
46: Object rnr = null;
47: ResultSet rs = queries[0].fetchResultSet();
48: if (rs != null && rs.next()) {
49: lnr = rs.getObject(1);
50: rnr = rs.getObject(2);
51: }
52:
53: // SELECT @ISCHILD = 0
54: // IF EXISTS (
55: // SELECT 1 FROM CONTENT_TREE WHERE LEFT_NR < @LNR AND RIGHT_NR > @RNR AND CONTENT_NODE_ID = ?
56: // CLASS: SelectChildExists.class
57: // PARAMS: LEFT_NR, RIGHT_NR, PARENT_ID
58: // [1]
59: // )
60: // SELECT @ISCHILD = 1
61: // SELECT @ISCHILD AS ISCHILD
62: // CLASS: SelectIsChild.class
63: // PARAMS: IS_CHILD
64: // [2]
65: queries[1].setQueryParams("LEFT_NR", lnr);
66: queries[1].setQueryParams("RIGHT_NR", rnr);
67: queries[1].setQueryParams("PARENT_ID", parentId);
68: queries[1].execute();
69: rs = queries[1].fetchResultSet();
70: int isChild = 0;
71: if (rs != null && rs.next()) {
72: isChild = 1;
73: }
74: queries[2].setQueryParams("IS_CHILD", new Integer(isChild));
75: queries[2].execute();
76: addResult(queries[2].fetchResultSet());
77:
78: } catch (Throwable t) {
79: TKDBManager.safeRollbackTransaction(t);
80: }
81: return hasResults();
82: }
83:
84: public void initQuery(Connection con) {
85: super.initQuery(con, ISPREPARED, PARAMORDER, TYPES,
86: SETRELEVANTS, null);
87: }
88: }
|