1
22
23 package com.liferay.portal.upgrade.v5_1_0;
24
25 import com.liferay.portal.kernel.dao.jdbc.DataAccess;
26 import com.liferay.portal.upgrade.UpgradeException;
27 import com.liferay.portal.upgrade.UpgradeProcess;
28
29 import java.sql.Connection;
30 import java.sql.PreparedStatement;
31 import java.sql.ResultSet;
32
33 import org.apache.commons.logging.Log;
34 import org.apache.commons.logging.LogFactory;
35
36
42 public class UpgradeMessageBoards extends UpgradeProcess {
43
44 public void upgrade() throws UpgradeException {
45 _log.info("Upgrading");
46
47 try {
48 doUpgrade();
49 }
50 catch (Exception e) {
51 throw new UpgradeException(e);
52 }
53 }
54
55 protected void doUpgrade() throws Exception {
56
57
59 while (getMessageIdsCount() > 0) {
60 updateMessage();
61 }
62 }
63
64 protected long getMessageIdsCount() throws Exception {
65 StringBuilder sb = new StringBuilder();
66
67 sb.append("select count(*) from ");
68 sb.append("MBMessage childMessage ");
69 sb.append("inner join MBMessage parentMessage on ");
70 sb.append("childMessage.parentMessageId = parentMessage.messageId ");
71 sb.append("where parentMessage.categoryId != childMessage.categoryId ");
72 sb.append("or parentMessage.threadId != childMessage.threadId");
73
74 String sql = sb.toString();
75
76 Connection con = null;
77 PreparedStatement ps = null;
78 ResultSet rs = null;
79
80 try {
81 con = DataAccess.getConnection();
82
83 ps = con.prepareStatement(sql);
84
85 rs = ps.executeQuery();
86
87 while (rs.next()) {
88 return rs.getLong(1);
89 }
90
91 return 0;
92 }
93 finally {
94 DataAccess.cleanUp(con, ps, rs);
95 }
96 }
97
98 protected void updateMessage() throws Exception {
99 StringBuilder sb = new StringBuilder();
100
101 sb.append("select childMessage.messageId, parentMessage.categoryId, ");
102 sb.append("parentMessage.threadId ");
103 sb.append("from MBMessage childMessage ");
104 sb.append("inner join MBMessage parentMessage on ");
105 sb.append("childMessage.parentMessageId = parentMessage.messageId ");
106 sb.append("where parentMessage.categoryId != childMessage.categoryId ");
107 sb.append("or parentMessage.threadId != childMessage.threadId");
108
109 String sql = sb.toString();
110
111 Connection con = null;
112 PreparedStatement ps = null;
113 ResultSet rs = null;
114
115 try {
116 con = DataAccess.getConnection();
117
118 ps = con.prepareStatement(sql);
119
120 rs = ps.executeQuery();
121
122 while (rs.next()) {
123 long messageId = rs.getLong(1);
124 long categoryId = rs.getLong(2);
125 long threadId = rs.getLong(3);
126
127 runSQL(
128 "update MBMessage set categoryId = " + categoryId +
129 ", threadId = " + threadId + " where messageId = " +
130 messageId);
131 }
132 }
133 finally {
134 DataAccess.cleanUp(con, ps, rs);
135 }
136 }
137
138 private static Log _log = LogFactory.getLog(UpgradeMessageBoards.class);
139
140 }