001: /**
002: * Jedes Selectstatement erhaelt eine eigene Klasse
003: */package com.teamkonzept.webman.mainint.db.queries.oracle;
004:
005: import com.teamkonzept.db.*;
006: import java.sql.*;
007: import com.teamkonzept.webman.mainint.WebmanExceptionHandler;
008:
009: public class TKDBContentNewVersion extends TKExtendedPrepQuery {
010:
011: public final static boolean isPrepared = true;
012:
013: public final static String[] paramOrder = { "INSTANCE_ID",
014: "STATUS_ID", "VERS_INFO", "VERS_AUTHOR" };
015:
016: public final static Object[][] types = {
017: { "VERS_INFO", new Integer(Types.VARCHAR) },
018: { "VERS_AUTHOR", new Integer(Types.VARCHAR) }, };
019:
020: public final static boolean[] setRelevants = { false };
021:
022: /*public final static String sqlString =
023: "DECLARE @VERS_ID INT " +
024: "DECLARE @CONT_ID INT " +
025: "DECLARE @INST_ID INT " +
026:
027: "BEGIN TRANSACTION " +
028:
029: "SELECT @INST_ID = ? " +
030:
031: "SELECT @VERS_ID=ISNULL(MAX(VERSION_ID)+1, 1) " +
032: "FROM CONTENT_VERSION " +
033:
034: "SELECT @CONT_ID= " +
035: " ( " +
036: " SELECT MAX (CONTENT_ID) " +
037: " FROM CONTENT_VERSION "+
038: " WHERE INSTANCE_ID = @INST_ID " +
039: " ) " +
040:
041: "INSERT INTO CONTENT_VERSION (VERSION_ID, INSTANCE_ID, CONTENT_ID, STATUS_ID, VERSION_DATE, INFO, AUTHOR) " +
042: " VALUES (@VERS_ID, @INST_ID, @CONT_ID, ?, {fn NOW()}, ?, ?) " +
043:
044: "COMMIT TRANSACTION " +
045:
046: "SELECT CV.*, CI.NAME FROM CONTENT_VERSION CV, CONTENT_INSTANCE CI " +
047: "WHERE CV.VERSION_ID = @VERS_ID AND CI.INSTANCE_ID = @INST_ID "; */
048:
049: protected static Class[] queryClasses = {
050: com.teamkonzept.webman.mainint.db.queries.content.SelectMaxContentVersion.class, // [0]
051: com.teamkonzept.webman.mainint.db.queries.content.SelectMaxContentVersionWhere.class, // [1]
052: com.teamkonzept.webman.mainint.db.queries.content.InsertContentVersion.class, // [2]
053: com.teamkonzept.webman.mainint.db.queries.content.SelectContentVersionContentInstance.class // [3]
054: };
055:
056: public boolean execute() {
057: try {
058: init(queryClasses); // init query objects
059:
060: // SELECT @INST_ID = ?
061: Integer instIdObj = (Integer) queryParams
062: .get("INSTANCE_ID");
063:
064: boolean isNotOpen = aTKDBConnection.isAutoCommit();
065: if (isNotOpen) {
066: TKDBManager.beginTransaction();
067: }
068:
069: int vers_id = 1;
070: // SELECT @VERS_ID=ISNULL(MAX(VERSION_ID)+1, 1) FROM CONTENT_VERSION
071: queries[0].execute();
072: ResultSet rs = queries[0].fetchResultSet();
073: if (rs != null && rs.next()) {
074: vers_id = rs.getInt(1) + 1;
075: }
076:
077: //int cont_id = 0;
078: Object contIdObj = null;
079: // SELECT @CONT_ID= ( SELECT MAX (CONTENT_ID) FROM CONTENT_VERSION WHERE INSTANCE_ID = @INST_ID )
080: // PARAMS: INSTANCE_ID
081: queries[1].setQueryParams("INSTANCE_ID", instIdObj);
082: queries[1].execute();
083: rs = queries[1].fetchResultSet();
084: if (rs != null && rs.next()) {
085: contIdObj = rs.getObject(1);
086: }
087:
088: // INSERT INTO CONTENT_VERSION (VERSION_ID, INSTANCE_ID, CONTENT_ID, STATUS_ID, VERSION_DATE, INFO, AUTHOR)
089: // VALUES (@VERS_ID, @INST_ID, @CONT_ID, ?, {fn NOW()}, ?, ?)
090: // PARAMS: VERSION_ID, INSTANCE_ID, CONTENT_ID, STATUS_ID, DATE (DATE), VERS_INFO (VARCHAR), VERS_AUTHOR (VARCHAR)
091: queries[2].setQueryParams("VERSION_ID",
092: new Integer(vers_id));
093: queries[2].setQueryParams("INSTANCE_ID", instIdObj);
094: queries[2].setQueryParams("CONTENT_ID", contIdObj);
095: queries[2].setQueryParams("STATUS_ID", queryParams
096: .get("STATUS_ID"));
097: queries[2].setQueryParams("DATE", new java.sql.Timestamp(
098: System.currentTimeMillis()));
099: queries[2].setQueryParams("VERS_INFO", queryParams
100: .get("VERS_INFO"));
101: queries[2].setQueryParams("VERS_AUTHOR", queryParams
102: .get("VERS_AUTHOR"));
103: queries[2].execute();
104:
105: if (isNotOpen) {
106: aTKDBConnection.commitTransaction(); // commit all changes
107: }
108:
109: // SELECT CV.*, CI.NAME FROM CONTENT_VERSION CV, CONTENT_INSTANCE CI
110: // WHERE CV.VERSION_ID = @VERS_ID AND CI.INSTANCE_ID = @INST_ID
111: // PARAMS: VERSION_ID, INSTANCE_ID
112: queries[3].setQueryParams("VERSION_ID",
113: new Integer(vers_id));
114: queries[3].setQueryParams("INSTANCE_ID", instIdObj);
115: queries[3].execute();
116: addResult(queries[3].fetchResultSet());
117:
118: } catch (Throwable t) {
119: TKDBManager.safeRollbackTransaction(t);
120: }
121: return hasResults();
122: }
123:
124: public void initQuery(Connection con) {
125: super.initQuery(con, isPrepared, paramOrder, types,
126: setRelevants, null);
127: }
128: }
|