001: package com.teamkonzept.webman.mainint.db.queries;
002:
003: import com.teamkonzept.db.*;
004: import java.sql.*;
005: import com.teamkonzept.webman.mainint.db.queries.content.*;
006: import com.teamkonzept.webman.mainint.WebmanExceptionHandler;
007:
008: /*
009: * TKDBContentTreeIsChild
010: * Sagt ob die CHILD_ID ein Nachfolger von PARENT_ID im CONTENT_TREE ist
011: *
012: * Input: PARENT_ID CHILD_ID
013: * Output: ISCHILD = 1 oder 0
014: */
015: public class TKDBContentTreeIsChild extends TKExtendedPrepQuery {
016:
017: public final static boolean isPrepared = true;
018:
019: public final static String[] paramOrder = { "CHILD_ID", "PARENT_ID" };
020:
021: public final static Object[][] types = null;
022:
023: public final static boolean[] setRelevants = { true };
024:
025: /* public final static String sqlString =
026: "DECLARE @ISCHILD int " +
027: "DECLARE @LNR int " +
028: "DECLARE @RNR int " +
029:
030: "SELECT " +
031: " @LNR = LEFT_NR, " +
032: " @RNR = RIGHT_NR " +
033: "FROM " +
034: " CONTENT_TREE " +
035: "WHERE " +
036: " CONTENT_NODE_ID = ? " +
037:
038: "SELECT @ISCHILD = 0 " +
039:
040: "IF EXISTS ( " +
041: "SELECT " +
042: " 1 " +
043: "FROM " +
044: " CONTENT_TREE " +
045: "WHERE " +
046: " LEFT_NR < @LNR " +
047: "AND " +
048: " RIGHT_NR > @RNR " +
049: "AND " +
050: " CONTENT_NODE_ID = ? " +
051: ") " +
052: " SELECT @ISCHILD = 1 " +
053: "SELECT @ISCHILD AS ISCHILD "; */
054:
055: protected static Class[] queryClasses = {
056: SelectLeftRightNrFromContentTree.class, // [0]
057: SelectChildExists.class, // [1]
058: SelectIsChild.class // [2]
059: };
060:
061: public boolean execute() {
062: try {
063: init(queryClasses); // init query objects
064:
065: Integer childId = (Integer) queryParams.get("CHILD_ID");
066: Integer parentId = (Integer) queryParams.get("PARENT_ID");
067:
068: // OLD: SELECT @LNR = LEFT_NR, @RNR = RIGHT_NR FROM CONTENT_TREE WHERE CONTENT_NODE_ID = ?
069: // NEW: SELECT LEFT_NR, RIGHT_NR FROM CONTENT_TREE WHERE CONTENT_NODE_ID = ?
070: // CLASS: SelectLeftRightNrFromContentTree.class
071: // PARAMS: NODE_ID
072: // [0]
073: queries[0].setQueryParams("NODE_ID", childId);
074: queries[0].execute();
075: Object lnr = null;
076: Object rnr = null;
077: ResultSet rs = queries[0].fetchResultSet();
078: if (rs != null && rs.next()) {
079: lnr = rs.getObject(1);
080: rnr = rs.getObject(2);
081: }
082:
083: // SELECT @ISCHILD = 0
084: // IF EXISTS (
085: // SELECT 1 FROM CONTENT_TREE WHERE LEFT_NR < @LNR AND RIGHT_NR > @RNR AND CONTENT_NODE_ID = ?
086: // CLASS: SelectChildExists.class
087: // PARAMS: LEFT_NR, RIGHT_NR, PARENT_ID
088: // [1]
089: // )
090: // SELECT @ISCHILD = 1
091: // SELECT @ISCHILD AS ISCHILD
092: // CLASS: SelectIsChild.class
093: // PARAMS: IS_CHILD
094: // [2]
095: queries[1].setQueryParams("LEFT_NR", lnr);
096: queries[1].setQueryParams("RIGHT_NR", rnr);
097: queries[1].setQueryParams("PARENT_ID", parentId);
098: queries[1].execute();
099: rs = queries[1].fetchResultSet();
100: int isChild = 0;
101: if (rs != null && rs.next()) {
102: isChild = 1;
103: }
104: queries[2].setQueryParams("IS_CHILD", new Integer(isChild));
105: queries[2].execute();
106: addResult(queries[2].fetchResultSet());
107:
108: } catch (Throwable t) {
109: TKDBManager.safeRollbackTransaction(t);
110: }
111: return hasResults();
112: }
113:
114: public void initQuery(Connection con) {
115: super.initQuery(con, isPrepared, paramOrder, types,
116: setRelevants, null);
117: }
118: }
|