001: package com.teamkonzept.webman.mainint.db.queries.postgresql;
002:
003: import java.sql.*;
004: import com.teamkonzept.db.*;
005: import com.teamkonzept.webman.mainint.db.queries.content.*;
006: import com.teamkonzept.webman.mainint.db.queries.CheckTableExistence;
007: import com.teamkonzept.webman.mainint.WebmanExceptionHandler;
008:
009: /*
010: * TKDBContentTreeDeleteDependentDC
011: * loescht alle Eintraeg in DC die abhaengkeiten in CONTENT_TREE haben
012: * Input: CONTENT_NODE_ID
013: * Output: none
014: * @author
015: * @version
016: */
017: public class TKDBContentTreeDeleteDependentDC extends
018: TKExtendedPrepQuery {
019: public final static boolean ISPREPARED = true;
020:
021: public final static String[] PARAMORDER = { "CONTENT_NODE_ID" };
022:
023: public final static Object[][] TYPES = null;
024:
025: public final static boolean[] SETRELEVANTS = { false };
026:
027: protected static Class[] queryClasses = {
028: CheckTableExistence.class, // [0]
029: CreateTempTableContentNodeId.class, // [1]
030: SelectLeftRightNrFromContentTree.class, // [2]
031: InsertIntoTempTableContentNodeId.class, // [3]
032: DeleteFromContentSelection2.class, // [4]
033: DeleteFromDocumentContent2.class, // [5]
034: DropTempTableContentNodeId.class // [6]
035: };
036:
037: public boolean execute() {
038: try {
039:
040: init(queryClasses); // init query objects
041:
042: Object contentNodeId = queryParams.get("CONTENT_NODE_ID");
043:
044: boolean isNotOpen = aTKDBConnection.isAutoCommit();
045: if (isNotOpen) {
046: TKDBManager.beginTransaction(); // begin transaction
047: }
048:
049: // CLASS: CheckTableExistence.class
050: // PARAMS: TABLE_NAME (=WEBMAN_TEMP)
051: // [0]
052: queries[0].setQueryParams("TABLE_NAME", "webman_temp"); // check existence!!!
053: queries[0].execute();
054: ResultSet exist = queries[0].fetchResultSet();
055: if (exist != null && exist.next()) {
056: queries[6].execute();
057: }
058: queries[1].execute();
059:
060: // OLD: SELECT @L_NR = LEFT_NR, @R_NR = RIGHT_NR FROM CONTENT_TREE WHERE CONTENT_NODE_ID = ?
061: // NEW: SELECT LEFT_NR, RIGHT_NR FROM CONTENT_TREE WHERE CONTENT_NODE_ID = ?
062: // CLASS: SelectLeftRightNrFromContentTree.class
063: // PARAMS: NODE_ID
064: // [2]
065: queries[2].setQueryParams("NODE_ID", contentNodeId);
066: queries[2].execute();
067: ResultSet rs2 = queries[2].fetchResultSet();
068: Object leftNr = null;
069: Object rightNr = null;
070: if (rs2 != null && rs2.next()) {
071: leftNr = rs2.getObject(1);
072: rightNr = rs2.getObject(2);
073: }
074:
075: // OLD: INSERT INTO #temp (CONTENT_NODE_ID) SELECT (CONTENT_NODE_ID) FROM CONTENT_TREE WHERE LEFT_NR >= @L_NR AND RIGHT_NR <= @R_NR
076: // NEW: INSERT INTO WEBMAN_TEMP SELECT CONTENT_NODE_ID FROM CONTENT_TREE WHERE LEFT_NR >= ? AND RIGHT_NR <= ?
077: // CLASS: InsertTempTable1ContentNodeId.class
078: // PARAMS: LEFT_NR, RIGHT_NR
079: // [3]
080: queries[3].setQueryParams("LEFT_NR", leftNr);
081: queries[3].setQueryParams("RIGHT_NR", rightNr);
082: queries[3].execute();
083:
084: // OLD: DELETE FROM CONTENT_SELECTION WHERE SELECTION_ID IN ( SELECT SELECTION_ID FROM DOCUMENT_CONTENT WHERE CONTENT_NODE_ID IN ( SELECT CONTENT_NODE_ID FROM #temp ) AND SELECTION_ID IS NOT NULL )
085: // NEW: DELETE FROM CONTENT_SELECTION WHERE SELECTION_ID IN ( SELECT SELECTION_ID FROM DOCUMENT_CONTENT WHERE CONTENT_NODE_ID IN ( SELECT CONTENT_NODE_ID FROM WEBMAN_TEMP ) AND SELECTION_ID IS NOT NULL )
086: // CLASS: DeleteFromContentSelection2.class
087: // [4]
088: queries[4].execute();
089:
090: // OLD: DELETE FROM DOCUMENT_CONTENT WHERE CONTENT_NODE_ID IN ( SELECT CONTENT_NODE_ID FROM #temp )
091: // NEW: DELETE FROM DOCUMENT_CONTENT WHERE CONTENT_NODE_ID IN ( SELECT CONTENT_NODE_ID FROM WEBMAN_TEMP )
092: // CLASS: DeleteFromDocumentContent2.class
093: // [5]
094: queries[5].execute();
095:
096: // Drop Table Webman_Temp
097: queries[6].execute();
098:
099: // COMMIT TRANSACTION " +
100: if (isNotOpen) {
101: aTKDBConnection.commitTransaction(); // commit all changes
102: }
103:
104: } catch (Throwable t) {
105: TKDBManager.safeRollbackTransaction(t);
106: }
107: return hasResults();
108: }
109:
110: public void initQuery(Connection con) {
111: super.initQuery(con, ISPREPARED, PARAMORDER, TYPES,
112: SETRELEVANTS, null);
113: }
114: }
|