001: package com.teamkonzept.webman.mainint.db.queries;
002:
003: import java.util.Enumeration;
004: import java.sql.*;
005: import java.io.*;
006: import com.teamkonzept.db.*; //import com.teamkonzept.db.atomic.content.*;
007: //import com.teamkonzept.db.atomic.CheckTableExistence;
008: import com.teamkonzept.webman.mainint.db.queries.CheckTableExistence;
009: import com.teamkonzept.webman.mainint.db.queries.content.*;
010: import com.teamkonzept.webman.mainint.WebmanExceptionHandler;
011: import com.teamkonzept.lib.TKNull;
012:
013: /*
014: * TKDBContentTreeGetOpen
015: * gibt eine teilweise geoeffneten Baum zurueck
016: * Input: NODE_ID des zu oefneten Knotens
017: * Output: CONTENT_NODE_ID, CONTENT_NODE_NAME, CONTENT_NODE_SHORTNAME
018: * CONTENT_NODE_TYPE, CONTENT_FORM, CONTENT_NODE_PARENT, NODE_ID
019: * wenn die NODE_ID = CONTENT_NODE_ID dann ist dieser Knoten oeffenbar, aber geschlossen
020: * wenn die NODE_ID = NULL dann ist dieser ein Blatt
021: * wenn die NODE_ID = CONTENT_NODE_PARENT dann ist dieser Knoten oeffenbar und offen
022: */
023: public class TKDBContentTreeGetOpen extends TKExtendedPrepQuery {
024: public final static boolean ISPREPARED = true;
025: public final static String[] PARAMORDER = { "NODE_ID" };
026: public final static Object[][] TYPES = null;
027: public final static boolean[] SETRELEVANTS = { true };
028:
029: protected static Class[] queryClasses = {
030: CheckTableExistence.class, // [0]
031: SelectContentNodeIdFromContentTree.class, // [1]
032: SelectLeftRightNrFromContentTree.class, // [2]
033: CreateTempTableContentNodeId.class, // [3]
034: CreateTempTableContentNodeIdNodeId.class, // [4]
035: InsertIntoTempSelectContentNodeIdLeftRightFromContentTree.class, // [5]
036: InsertTempTableContentNodeIdNodeId.class, // [6]
037: UpdateTempTableContentNodeIdNodeId.class, // [7]
038: UpdateTempTableContentNodeIdNodeId2.class, // [8]
039: SelectFromContentTreeContentInstanceTempTable.class, // [9]
040: };
041:
042: public boolean execute() {
043: try {
044: init(queryClasses); // init query objects
045:
046: // SELECT @N_ID = ?
047: Object nid = queryParams.get("NODE_ID");
048:
049: boolean isNotOpen = aTKDBConnection.isAutoCommit();
050:
051: if (isNotOpen) {
052: TKDBManager.beginTransaction(); // begin transaction
053: }
054:
055: // IF (@N_ID IS NULL)
056: if (nid == null || nid instanceof TKNull) {
057: // SELECT @N_ID = CONTENT_NODE_ID FROM CONTENT_TREE WHERE CONTENT_NODE_PARENT IS NULL
058: queries[1].execute();
059: ResultSet rs = queries[1].fetchResultSet();
060: if (rs != null && rs.next()) {
061: nid = rs.getObject(1);
062: }
063: }
064: // SELECT @LNR = LEFT_NR, @RNR = RIGHT_NR FROM CONTENT_TREE WHERE CONTENT_NODE_ID = @N_ID
065: Object lnr = null;
066: Object rnr = null;
067: queries[2].setQueryParams("NODE_ID", nid);
068: queries[2].execute();
069: ResultSet rs = queries[2].fetchResultSet();
070: if (rs != null && rs.next()) {
071: lnr = rs.getObject(1);
072: rnr = rs.getObject(2);
073: }
074:
075: queries[0].setQueryParams("TABLE_NAME", "WEBMAN_TEMP"); // check existence!!!
076: queries[0].execute();
077: ResultSet exist = queries[0].fetchResultSet();
078: if (exist == null || !exist.next())
079: queries[3].execute();
080: queries[0].setQueryParams("TABLE_NAME", "WEBMAN_TEMP_2"); // check existence!!!
081: queries[0].execute();
082: exist = queries[0].fetchResultSet();
083: if (exist == null || !exist.next())
084: queries[4].execute();
085: // OLD:
086: // SELECT CONTENT_NODE_ID INTO #temp FROM CONTENT_TREE " +
087: // WHERE LEFT_NR <= @LNR AND RIGHT_NR >= @RNR " +
088:
089: // NEW:
090: // INSERT INTO WEBMAN_TEMP SELECT CONTENT_NODE_ID FROM CONTENT_TREE WHERE LEFT_NR <= @LNR AND RIGHT_NR >= @RNR
091: queries[5].setQueryParams("LEFT_NR", lnr);
092: queries[5].setQueryParams("RIGHT_NR", rnr);
093: queries[5].execute();
094:
095: // INSERT INTO #temp2 SELECT CONTENT_NODE_ID, CONTENT_NODE_ID FROM CONTENT_TREE
096: // WHERE CONTENT_NODE_PARENT IN ( SELECT CONTENT_NODE_ID FROM #temp )
097: // OR
098: // CONTENT_NODE_ID IN ( SELECT CONTENT_NODE_ID FROM #temp )
099: queries[6].execute();
100:
101: // OLD:
102: // UPDATE #temp2 SET NODE_ID = CT.CONTENT_NODE_PARENT FROM
103: // #temp T, CONTENT_TREE CT WHERE CT.CONTENT_NODE_ID = #temp2.CONTENT_NODE_ID
104: // AND CT.CONTENT_NODE_ID = T.CONTENT_NODE_ID
105: // NEW:
106: // UPDATE WEBMAN_TEMP_2 SET NODE_ID =
107: // (SELECT CT.CONTENT_NODE_PARENT FROM CONTENT_TREE CT, WEBMAN_TEMP T
108: // WHERE CT.CONTENT_NODE_ID = WEBMAN_TEMP_2.CONTENT_NODE_ID
109: // AND CT.CONTENT_NODE_ID = T.CONTENT_NODE_ID)
110: // WHERE CONTENT_NODE_ID IN (SELECT CONTENT_NODE_ID FROM WEBMAN_TEMP)
111: queries[7].execute();
112:
113: // OLD:
114: // UPDATE #temp2 SET NODE_ID = NULL FROM CONTENT_TREE CT
115: // WHERE CT.CONTENT_NODE_ID = #temp2.CONTENT_NODE_ID AND CT.CONTENT_NODE_TYPE > 1
116: // NEW: UPDATE WEBMAN_TEMP_2 SET NODE_ID =
117: // (SELECT NULL FROM CONTENT_TREE CT, WEBMAN_TEMP T WHERE CT.CONTENT_NODE_ID = WEBMAN_TEMP_2.CONTENT_NODE_ID AND CT.CONTENT_NODE_TYPE > 1) WHERE CONTENT_NODE_ID IN (SELECT T.CONTENT_NODE_ID FROM WEBMAN_TEMP T, CONTENT_TREE CT WHERE CT.CONTENT_NODE_ID = WEBMAN_TEMP_2.CONTENT_NODE_ID AND CT.CONTENT_NODE_TYPE > 1)
118: queries[8].execute();
119: // SELECT CT.CONTENT_NODE_ID, CI.INSTANCE_ID, CI.NAME, CT.CONTENT_NODE_NAME,
120: // CT.CONTENT_NODE_SHORTNAME, CT.CONTENT_NODE_TYPE, CT.LEFT_NR, CT.RIGHT_NR,
121: // CT.CONTENT_FORM, CT.CONTENT_NODE_PARENT, T.NODE_ID
122: // FROM CONTENT_TREE CT, CONTENT_INSTANCE CI, #temp2 T
123: // WHERE
124: // CT.CONTENT_NODE_ID = T.CONTENT_NODE_ID AND CI.CONTENT_NODE_ID =* CT.CONTENT_NODE_ID
125: // ORDER BY
126: // CT.LEFT_NR
127:
128: queries[9].execute();
129: addResult(queries[9].fetchResultSet());
130:
131: if (isNotOpen) {
132: aTKDBConnection.commitTransaction(); // commit all changes
133: }
134:
135: } catch (Throwable t) {
136: TKDBManager.safeRollbackTransaction(t);
137: }
138: return hasResults();
139: }
140:
141: public void initQuery(Connection con) {
142: super.initQuery(con, ISPREPARED, PARAMORDER, TYPES,
143: SETRELEVANTS, null);
144: }
145: }
|