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